From 51f46e6d3c3e9935389eca2f4f3b20682e24789b Mon Sep 17 00:00:00 2001 From: Michael Goberling Date: Thu, 18 Dec 2025 16:38:56 -0500 Subject: [PATCH] feat: standardize ims credentials, make them predictable and easy to add to actions --- schema/config.schema.json | 3 +- src/lib/import-helper.js | 57 +++++++++++++++++- test/__fixtures__/config.apikey.aio | 31 ++++++++++ test/__fixtures__/config.apikey.env | 5 ++ test/__fixtures__/config.apikey.json | 44 ++++++++++++++ test/__fixtures__/config.orgid.env | 20 +++---- test/__fixtures__/config.orgid.no.jwt.env | 8 +-- test/__fixtures__/existing.merged.env | 60 +++++++++---------- test/__fixtures__/oauths2s/valid.config.env | 60 +++++++++---------- .../oauths2s/valid.config.migrate.1.env | 60 +++++++++---------- .../oauths2s/valid.config.migrate.2.env | 60 +++++++++---------- test/__fixtures__/valid.config.env | 60 +++++++++---------- test/commands/lib/import-helper.test.js | 34 +++++++++++ 13 files changed, 334 insertions(+), 168 deletions(-) create mode 100644 test/__fixtures__/config.apikey.aio create mode 100644 test/__fixtures__/config.apikey.env create mode 100644 test/__fixtures__/config.apikey.json diff --git a/schema/config.schema.json b/schema/config.schema.json index 528f9b61c..82c2db844 100644 --- a/schema/config.schema.json +++ b/schema/config.schema.json @@ -238,7 +238,8 @@ "api_key": { "type": "object", "properties": { - "client_id": { "type": "string" } + "client_id": { "type": "string" }, + "api_key": { "type": "string" } }, "required": ["client_id"] }, diff --git a/src/lib/import-helper.js b/src/lib/import-helper.js index 789220632..008308f70 100644 --- a/src/lib/import-helper.js +++ b/src/lib/import-helper.js @@ -389,6 +389,49 @@ async function writeFile (destination, data, flags = {}) { }) } +/** + * Formats IMS credentials into simplified environment variable format. + * First credential has no suffix, subsequent credentials get _2, _3, etc. + * Dynamically maps all credential fields to IMS_* environment variables. + * + * @param {object} credentials The credentials object from transformCredentials + * @returns {object} Key-value pairs of IMS environment variables + * @private + */ +function formatImsCredentialsForEnv (credentials) { + const result = {} + const credentialKeys = Object.keys(credentials) + + credentialKeys.forEach((credKey, index) => { + const credential = credentials[credKey] + const suffix = index === 0 ? '' : `_${index + 1}` + + // Dynamically map each credential field to IMS_* variables + Object.keys(credential).forEach(fieldName => { + const value = credential[fieldName] + + // If field already starts with 'ims_', just uppercase it (avoid double-prefixing) + // Otherwise, add IMS_ prefix + const envVarName = fieldName.startsWith('ims_') + ? `${fieldName.toUpperCase()}${suffix}` + : `IMS_${fieldName.toUpperCase()}${suffix}` + + // Special handling for redirect_uri - extract first element if array + if (fieldName === 'redirect_uri' && Array.isArray(value)) { + result[envVarName] = value[0] + } else if (Array.isArray(value)) { + // Serialize arrays to JSON + result[envVarName] = JSON.stringify(value) + } else { + // Use primitive values as-is + result[envVarName] = value + } + }) + }) + + return result +} + /** * Writes the json object as AIO_ env vars to the .env file in the specified parent folder. * @@ -649,10 +692,17 @@ async function importConfigJson (configFileOrBuffer, destinationFolder = process const { runtime, credentials } = config.project.workspace.details + // Transform credentials and format as simplified IMS_* env vars + const transformedCredentials = transformCredentials(credentials, config.project.org.ims_org_id, flags.useJwt) + const imsEnvVars = formatImsCredentialsForEnv(transformedCredentials) + + // Merge IMS vars with any extra env vars + const allExtraEnvVars = { ...imsEnvVars, ...extraEnvVars } + + // Only pass runtime through the flatten process (keeps AIO_runtime_* format) await writeEnv({ - runtime: transformRuntime(runtime), - ims: { contexts: transformCredentials(credentials, config.project.org.ims_org_id, flags.useJwt) } - }, destinationFolder, flags, extraEnvVars) + runtime: transformRuntime(runtime) + }, destinationFolder, flags, allExtraEnvVars) // remove the credentials delete config.project.workspace.details.runtime @@ -748,5 +798,6 @@ module.exports = { mergeEnv, splitEnvLine, getProjectCredentialType, + formatImsCredentialsForEnv, CONSOLE_CONFIG_KEY } diff --git a/test/__fixtures__/config.apikey.aio b/test/__fixtures__/config.apikey.aio new file mode 100644 index 000000000..f8b8c132e --- /dev/null +++ b/test/__fixtures__/config.apikey.aio @@ -0,0 +1,31 @@ +{ + "project": { + "id": "123", + "name": "TestProject", + "title": "Test Title", + "description": "My project description", + "org": { + "id": "25591412", + "name": "Developers", + "ims_org_id": "XOXOXOXOXOXOX@AdobeOrg" + }, + "workspace": { + "id": "1356", + "name": "TestWorkspace", + "title": "Test Title", + "description": "My workspace description", + "action_url": "https://ABCD-TestProject-TestWorkspace.adobeioruntime.net", + "app_url": "https://ABCD-TestProject-TestWorkspace.adobestatic.net", + "details": { + "credentials": [ + { + "id": "503084", + "name": "API_Key_Project", + "integration_type": "apikey" + } + ], + "services": [] + } + } + } +} \ No newline at end of file diff --git a/test/__fixtures__/config.apikey.env b/test/__fixtures__/config.apikey.env new file mode 100644 index 000000000..09c7ea682 --- /dev/null +++ b/test/__fixtures__/config.apikey.env @@ -0,0 +1,5 @@ +AIO_runtime_auth=Auth +AIO_runtime_namespace=Name +AIO_runtime_apihost=https://adobeioruntime.net +IMS_CLIENT_ID=41987c01396a4c2b9dd4d842f8b50f7b +IMS_API_KEY=my-actual-api-key-value-12345 diff --git a/test/__fixtures__/config.apikey.json b/test/__fixtures__/config.apikey.json new file mode 100644 index 000000000..c41bafd6a --- /dev/null +++ b/test/__fixtures__/config.apikey.json @@ -0,0 +1,44 @@ +{ + "project": { + "id": "123", + "name": "TestProject", + "title": "Test Title", + "description": "My project description", + "org": { + "id": "25591412", + "name": "Developers", + "ims_org_id": "XOXOXOXOXOXOX@AdobeOrg" + }, + "workspace": { + "id": "1356", + "name": "TestWorkspace", + "title": "Test Title", + "description": "My workspace description", + "action_url": "https://ABCD-TestProject-TestWorkspace.adobeioruntime.net", + "app_url": "https://ABCD-TestProject-TestWorkspace.adobestatic.net", + "details": { + "credentials": [ + { + "id": "503084", + "name": "API Key Project", + "integration_type": "apikey", + "api_key": { + "client_id": "41987c01396a4c2b9dd4d842f8b50f7b", + "api_key": "my-actual-api-key-value-12345" + } + } + ], + "services": [], + "runtime": { + "namespaces": [ + { + "name": "Name", + "auth": "Auth" + } + ] + } + } + } + } +} + diff --git a/test/__fixtures__/config.orgid.env b/test/__fixtures__/config.orgid.env index 7f53ee52d..89b9d232e 100644 --- a/test/__fixtures__/config.orgid.env +++ b/test/__fixtures__/config.orgid.env @@ -1,10 +1,10 @@ -AIO_ims_contexts_ProjectB_client__id=XUXUXUXUXUXUXUX -AIO_ims_contexts_ProjectB_client__secret=XPXPXPXPXPXPXPXPX -AIO_ims_contexts_ProjectB_technical__account__email=XTXTXTXTXTX@techacct.adobe.com -AIO_ims_contexts_ProjectB_technical__account__id=IDIDIDIDID@techacct.adobe.com -AIO_ims_contexts_ProjectB_meta__scopes=["ent_smartcontent_sdk","ent_adobeio_sdk"] -AIO_ims_contexts_ProjectB_ims__org__id=XOXOXOXOXOXOX@AdobeOrg -AIO_ims_contexts_NewTestIntegration8_client__id=XRXRXRXRXRXRXRXRXR -AIO_ims_contexts_NewTestIntegration8_client__secret=XRXRXRXRXRXRXRXRXRX -AIO_ims_contexts_NewTestIntegration8_redirect__uri=["https://abc123/foo"] -AIO_ims_contexts_NewTestIntegration8_defaultRedirectUri=https://abc123/foo +IMS_CLIENT_ID=XUXUXUXUXUXUXUX +IMS_CLIENT_SECRET=XPXPXPXPXPXPXPXPX +IMS_TECHNICAL_ACCOUNT_EMAIL=XTXTXTXTXTX@techacct.adobe.com +IMS_TECHNICAL_ACCOUNT_ID=IDIDIDIDID@techacct.adobe.com +IMS_META_SCOPES=["ent_smartcontent_sdk","ent_adobeio_sdk"] +IMS_ORG_ID=XOXOXOXOXOXOX@AdobeOrg +IMS_CLIENT_ID_2=XRXRXRXRXRXRXRXRXR +IMS_CLIENT_SECRET_2=XRXRXRXRXRXRXRXRXRX +IMS_REDIRECT_URI_2=https://abc123/foo +IMS_DEFAULTREDIRECTURI_2=https://abc123/foo diff --git a/test/__fixtures__/config.orgid.no.jwt.env b/test/__fixtures__/config.orgid.no.jwt.env index 42df78bdc..e1f97a530 100644 --- a/test/__fixtures__/config.orgid.no.jwt.env +++ b/test/__fixtures__/config.orgid.no.jwt.env @@ -1,4 +1,4 @@ -AIO_ims_contexts_NewTestIntegration8_client__id=XRXRXRXRXRXRXRXRXR -AIO_ims_contexts_NewTestIntegration8_client__secret=XRXRXRXRXRXRXRXRXRX -AIO_ims_contexts_NewTestIntegration8_redirect__uri=["https://abc123/foo"] -AIO_ims_contexts_NewTestIntegration8_defaultRedirectUri=https://abc123/foo +IMS_CLIENT_ID=XRXRXRXRXRXRXRXRXR +IMS_CLIENT_SECRET=XRXRXRXRXRXRXRXRXRX +IMS_REDIRECT_URI=https://abc123/foo +IMS_DEFAULTREDIRECTURI=https://abc123/foo diff --git a/test/__fixtures__/existing.merged.env b/test/__fixtures__/existing.merged.env index 22470b9bc..578e8ac9d 100644 --- a/test/__fixtures__/existing.merged.env +++ b/test/__fixtures__/existing.merged.env @@ -5,33 +5,33 @@ AIO_boo=faz AIO_runtime_auth=Auth AIO_runtime_namespace=Name AIO_runtime_apihost=https://adobeioruntime.net -AIO_ims_contexts_Projéct__A_client__id=XYXYXYXYXYXYXYXYX -AIO_ims_contexts_Projéct__A_client__secret=XYXYXYXYZZZZZZ -AIO_ims_contexts_Projéct__A_redirect__uri=["https://test123\\\\.com"] -AIO_ims_contexts_Projéct__A_defaultRedirectUri=https://test123 -AIO_ims_contexts_PröjectB_client__id=XUXUXUXUXUXUXUX -AIO_ims_contexts_PröjectB_client__secret=XPXPXPXPXPXPXPXPX -AIO_ims_contexts_PröjectB_technical__account__email=XTXTXTXTXTX@techacct.adobe.com -AIO_ims_contexts_PröjectB_technical__account__id=IDIDIDIDID@techacct.adobe.com -AIO_ims_contexts_PröjectB_meta__scopes=["ent_smartcontent_sdk","ent_adobeio_sdk"] -AIO_ims_contexts_PröjectB_ims__org__id=XOXOXOXOXOXOX@AdobeOrg -AIO_ims_contexts_Project__C_client__id=AKAKAKAKAKAKAKAKAKAKAKAK -AIO_ims_contexts_Project__D_client__id=KAKAKAKAKAKAKAKAKAKAKAKA -AIO_ims_contexts_Project__D_redirect__uri=["https://test123\\\\.com"] -AIO_ims_contexts_Project__D_defaultRedirectUri=https://test123 -AIO_ims_contexts_New__Test__Intégration__8_client__id=XRXRXRXRXRXRXRXRXR -AIO_ims_contexts_New__Test__Intégration__8_client__secret=XRXRXRXRXRXRXRXRXRX -AIO_ims_contexts_New__Test__Intégration__8_redirect__uri=["https://abc123\\\\.com/foo"] -AIO_ims_contexts_New__Test__Intégration__8_defaultRedirectUri=https://abc123/foo -AIO_ims_contexts_New__Test__Intégration__9_client__id=TYTYTYYUTYEWTEWRW -AIO_ims_contexts_New__Test__Intégration__9_client__secret=STWEGSDGEVBEGE -AIO_ims_contexts_New__Test__Intégration__9_redirect__uri=["https://abc123\\\\.com/foo2"] -AIO_ims_contexts_New__Test__Intégration__9_defaultRedirectUri=https://abc123/foo2 -AIO_ims_contexts_New__Test__Intégration__10_client__id=XXXTYTYTYYUTYEWTEWRW -AIO_ims_contexts_New__Test__Intégration__10_client__secret=XXXSTWEGSDGEVBEGE -AIO_ims_contexts_New__Test__Intégration__10_redirect__uri=["https://abc123\\\\.com/foo3"] -AIO_ims_contexts_New__Test__Intégration__10_defaultRedirectUri=https://abc123/foo3 -AIO_ims_contexts_New__Test__Intégration__11_client__id=YYYYXXXTYTYTYYUTYEWTEWRW -AIO_ims_contexts_New__Test__Intégration__11_client__secret=YYYYXXXSTWEGSDGEVBEGE -AIO_ims_contexts_New__Test__Intégration__11_redirect__uri=["https://abc123\\\\.com/foo4"] -AIO_ims_contexts_New__Test__Intégration__11_defaultRedirectUri=https://abc123/foo4 +IMS_CLIENT_ID=XYXYXYXYXYXYXYXYX +IMS_CLIENT_SECRET=XYXYXYXYZZZZZZ +IMS_REDIRECT_URI=https://test123\\.com +IMS_DEFAULTREDIRECTURI=https://test123 +IMS_CLIENT_ID_2=XUXUXUXUXUXUXUX +IMS_CLIENT_SECRET_2=XPXPXPXPXPXPXPXPX +IMS_TECHNICAL_ACCOUNT_EMAIL_2=XTXTXTXTXTX@techacct.adobe.com +IMS_TECHNICAL_ACCOUNT_ID_2=IDIDIDIDID@techacct.adobe.com +IMS_META_SCOPES_2=["ent_smartcontent_sdk","ent_adobeio_sdk"] +IMS_ORG_ID_2=XOXOXOXOXOXOX@AdobeOrg +IMS_CLIENT_ID_3=AKAKAKAKAKAKAKAKAKAKAKAK +IMS_CLIENT_ID_4=KAKAKAKAKAKAKAKAKAKAKAKA +IMS_REDIRECT_URI_4=https://test123\\.com +IMS_DEFAULTREDIRECTURI_4=https://test123 +IMS_CLIENT_ID_5=XRXRXRXRXRXRXRXRXR +IMS_CLIENT_SECRET_5=XRXRXRXRXRXRXRXRXRX +IMS_REDIRECT_URI_5=https://abc123\\.com/foo +IMS_DEFAULTREDIRECTURI_5=https://abc123/foo +IMS_CLIENT_ID_6=TYTYTYYUTYEWTEWRW +IMS_CLIENT_SECRET_6=STWEGSDGEVBEGE +IMS_REDIRECT_URI_6=https://abc123\\.com/foo2 +IMS_DEFAULTREDIRECTURI_6=https://abc123/foo2 +IMS_CLIENT_ID_7=XXXTYTYTYYUTYEWTEWRW +IMS_CLIENT_SECRET_7=XXXSTWEGSDGEVBEGE +IMS_REDIRECT_URI_7=https://abc123\\.com/foo3 +IMS_DEFAULTREDIRECTURI_7=https://abc123/foo3 +IMS_CLIENT_ID_8=YYYYXXXTYTYTYYUTYEWTEWRW +IMS_CLIENT_SECRET_8=YYYYXXXSTWEGSDGEVBEGE +IMS_REDIRECT_URI_8=https://abc123\\.com/foo4 +IMS_DEFAULTREDIRECTURI_8=https://abc123/foo4 diff --git a/test/__fixtures__/oauths2s/valid.config.env b/test/__fixtures__/oauths2s/valid.config.env index 722212f71..90db0e91b 100644 --- a/test/__fixtures__/oauths2s/valid.config.env +++ b/test/__fixtures__/oauths2s/valid.config.env @@ -1,33 +1,33 @@ AIO_runtime_auth=Auth AIO_runtime_namespace=Name AIO_runtime_apihost=https://adobeioruntime.net -AIO_ims_contexts_Projéct__A_client__id=XYXYXYXYXYXYXYXYX -AIO_ims_contexts_Projéct__A_client__secret=XYXYXYXYZZZZZZ -AIO_ims_contexts_Projéct__A_redirect__uri=["https://test123"] -AIO_ims_contexts_Projéct__A_defaultRedirectUri=https://test123 -AIO_ims_contexts_PröjectB_client__id=CXCXCXCXCXCXCXCXC -AIO_ims_contexts_PröjectB_client__secrets=["SFSFSFSFSFSFSFSFSFSFSFSFSFS"] -AIO_ims_contexts_PröjectB_technical__account__email=RERERERERERERE@techacct.adobe.com -AIO_ims_contexts_PröjectB_technical__account__id=GDGDGDGDGDGDG@techacct.adobe.com -AIO_ims_contexts_PröjectB_scopes=["openid","AdobeID"] -AIO_ims_contexts_PröjectB_ims__org__id=XOXOXOXOXOXOX@AdobeOrg -AIO_ims_contexts_Project__C_client__id=AKAKAKAKAKAKAKAKAKAKAKAK -AIO_ims_contexts_Project__D_client__id=KAKAKAKAKAKAKAKAKAKAKAKA -AIO_ims_contexts_Project__D_redirect__uri=["https://test123"] -AIO_ims_contexts_Project__D_defaultRedirectUri=https://test123 -AIO_ims_contexts_New__Test__Intégration__8_client__id=XRXRXRXRXRXRXRXRXR -AIO_ims_contexts_New__Test__Intégration__8_client__secret=XRXRXRXRXRXRXRXRXRX -AIO_ims_contexts_New__Test__Intégration__8_redirect__uri=["https://abc123/foo"] -AIO_ims_contexts_New__Test__Intégration__8_defaultRedirectUri=https://abc123/foo -AIO_ims_contexts_New__Test__Intégration__9_client__id=TYTYTYYUTYEWTEWRW -AIO_ims_contexts_New__Test__Intégration__9_client__secret=STWEGSDGEVBEGE -AIO_ims_contexts_New__Test__Intégration__9_redirect__uri=["https://abc123/foo2"] -AIO_ims_contexts_New__Test__Intégration__9_defaultRedirectUri=https://abc123/foo2 -AIO_ims_contexts_New__Test__Intégration__10_client__id=XXXTYTYTYYUTYEWTEWRW -AIO_ims_contexts_New__Test__Intégration__10_client__secret=XXXSTWEGSDGEVBEGE -AIO_ims_contexts_New__Test__Intégration__10_redirect__uri=["https://abc123/foo3"] -AIO_ims_contexts_New__Test__Intégration__10_defaultRedirectUri=https://abc123/foo3 -AIO_ims_contexts_New__Test__Intégration__11_client__id=YYYYXXXTYTYTYYUTYEWTEWRW -AIO_ims_contexts_New__Test__Intégration__11_client__secret=YYYYXXXSTWEGSDGEVBEGE -AIO_ims_contexts_New__Test__Intégration__11_redirect__uri=["https://abc123/foo4"] -AIO_ims_contexts_New__Test__Intégration__11_defaultRedirectUri=https://abc123/foo4 +IMS_CLIENT_ID=XYXYXYXYXYXYXYXYX +IMS_CLIENT_SECRET=XYXYXYXYZZZZZZ +IMS_REDIRECT_URI=https://test123 +IMS_DEFAULTREDIRECTURI=https://test123 +IMS_CLIENT_ID_2=CXCXCXCXCXCXCXCXC +IMS_CLIENT_SECRETS_2=["SFSFSFSFSFSFSFSFSFSFSFSFSFS"] +IMS_TECHNICAL_ACCOUNT_EMAIL_2=RERERERERERERE@techacct.adobe.com +IMS_TECHNICAL_ACCOUNT_ID_2=GDGDGDGDGDGDG@techacct.adobe.com +IMS_SCOPES_2=["openid","AdobeID"] +IMS_ORG_ID_2=XOXOXOXOXOXOX@AdobeOrg +IMS_CLIENT_ID_3=AKAKAKAKAKAKAKAKAKAKAKAK +IMS_CLIENT_ID_4=KAKAKAKAKAKAKAKAKAKAKAKA +IMS_REDIRECT_URI_4=https://test123 +IMS_DEFAULTREDIRECTURI_4=https://test123 +IMS_CLIENT_ID_5=XRXRXRXRXRXRXRXRXR +IMS_CLIENT_SECRET_5=XRXRXRXRXRXRXRXRXRX +IMS_REDIRECT_URI_5=https://abc123/foo +IMS_DEFAULTREDIRECTURI_5=https://abc123/foo +IMS_CLIENT_ID_6=TYTYTYYUTYEWTEWRW +IMS_CLIENT_SECRET_6=STWEGSDGEVBEGE +IMS_REDIRECT_URI_6=https://abc123/foo2 +IMS_DEFAULTREDIRECTURI_6=https://abc123/foo2 +IMS_CLIENT_ID_7=XXXTYTYTYYUTYEWTEWRW +IMS_CLIENT_SECRET_7=XXXSTWEGSDGEVBEGE +IMS_REDIRECT_URI_7=https://abc123/foo3 +IMS_DEFAULTREDIRECTURI_7=https://abc123/foo3 +IMS_CLIENT_ID_8=YYYYXXXTYTYTYYUTYEWTEWRW +IMS_CLIENT_SECRET_8=YYYYXXXSTWEGSDGEVBEGE +IMS_REDIRECT_URI_8=https://abc123/foo4 +IMS_DEFAULTREDIRECTURI_8=https://abc123/foo4 diff --git a/test/__fixtures__/oauths2s/valid.config.migrate.1.env b/test/__fixtures__/oauths2s/valid.config.migrate.1.env index 722212f71..90db0e91b 100644 --- a/test/__fixtures__/oauths2s/valid.config.migrate.1.env +++ b/test/__fixtures__/oauths2s/valid.config.migrate.1.env @@ -1,33 +1,33 @@ AIO_runtime_auth=Auth AIO_runtime_namespace=Name AIO_runtime_apihost=https://adobeioruntime.net -AIO_ims_contexts_Projéct__A_client__id=XYXYXYXYXYXYXYXYX -AIO_ims_contexts_Projéct__A_client__secret=XYXYXYXYZZZZZZ -AIO_ims_contexts_Projéct__A_redirect__uri=["https://test123"] -AIO_ims_contexts_Projéct__A_defaultRedirectUri=https://test123 -AIO_ims_contexts_PröjectB_client__id=CXCXCXCXCXCXCXCXC -AIO_ims_contexts_PröjectB_client__secrets=["SFSFSFSFSFSFSFSFSFSFSFSFSFS"] -AIO_ims_contexts_PröjectB_technical__account__email=RERERERERERERE@techacct.adobe.com -AIO_ims_contexts_PröjectB_technical__account__id=GDGDGDGDGDGDG@techacct.adobe.com -AIO_ims_contexts_PröjectB_scopes=["openid","AdobeID"] -AIO_ims_contexts_PröjectB_ims__org__id=XOXOXOXOXOXOX@AdobeOrg -AIO_ims_contexts_Project__C_client__id=AKAKAKAKAKAKAKAKAKAKAKAK -AIO_ims_contexts_Project__D_client__id=KAKAKAKAKAKAKAKAKAKAKAKA -AIO_ims_contexts_Project__D_redirect__uri=["https://test123"] -AIO_ims_contexts_Project__D_defaultRedirectUri=https://test123 -AIO_ims_contexts_New__Test__Intégration__8_client__id=XRXRXRXRXRXRXRXRXR -AIO_ims_contexts_New__Test__Intégration__8_client__secret=XRXRXRXRXRXRXRXRXRX -AIO_ims_contexts_New__Test__Intégration__8_redirect__uri=["https://abc123/foo"] -AIO_ims_contexts_New__Test__Intégration__8_defaultRedirectUri=https://abc123/foo -AIO_ims_contexts_New__Test__Intégration__9_client__id=TYTYTYYUTYEWTEWRW -AIO_ims_contexts_New__Test__Intégration__9_client__secret=STWEGSDGEVBEGE -AIO_ims_contexts_New__Test__Intégration__9_redirect__uri=["https://abc123/foo2"] -AIO_ims_contexts_New__Test__Intégration__9_defaultRedirectUri=https://abc123/foo2 -AIO_ims_contexts_New__Test__Intégration__10_client__id=XXXTYTYTYYUTYEWTEWRW -AIO_ims_contexts_New__Test__Intégration__10_client__secret=XXXSTWEGSDGEVBEGE -AIO_ims_contexts_New__Test__Intégration__10_redirect__uri=["https://abc123/foo3"] -AIO_ims_contexts_New__Test__Intégration__10_defaultRedirectUri=https://abc123/foo3 -AIO_ims_contexts_New__Test__Intégration__11_client__id=YYYYXXXTYTYTYYUTYEWTEWRW -AIO_ims_contexts_New__Test__Intégration__11_client__secret=YYYYXXXSTWEGSDGEVBEGE -AIO_ims_contexts_New__Test__Intégration__11_redirect__uri=["https://abc123/foo4"] -AIO_ims_contexts_New__Test__Intégration__11_defaultRedirectUri=https://abc123/foo4 +IMS_CLIENT_ID=XYXYXYXYXYXYXYXYX +IMS_CLIENT_SECRET=XYXYXYXYZZZZZZ +IMS_REDIRECT_URI=https://test123 +IMS_DEFAULTREDIRECTURI=https://test123 +IMS_CLIENT_ID_2=CXCXCXCXCXCXCXCXC +IMS_CLIENT_SECRETS_2=["SFSFSFSFSFSFSFSFSFSFSFSFSFS"] +IMS_TECHNICAL_ACCOUNT_EMAIL_2=RERERERERERERE@techacct.adobe.com +IMS_TECHNICAL_ACCOUNT_ID_2=GDGDGDGDGDGDG@techacct.adobe.com +IMS_SCOPES_2=["openid","AdobeID"] +IMS_ORG_ID_2=XOXOXOXOXOXOX@AdobeOrg +IMS_CLIENT_ID_3=AKAKAKAKAKAKAKAKAKAKAKAK +IMS_CLIENT_ID_4=KAKAKAKAKAKAKAKAKAKAKAKA +IMS_REDIRECT_URI_4=https://test123 +IMS_DEFAULTREDIRECTURI_4=https://test123 +IMS_CLIENT_ID_5=XRXRXRXRXRXRXRXRXR +IMS_CLIENT_SECRET_5=XRXRXRXRXRXRXRXRXRX +IMS_REDIRECT_URI_5=https://abc123/foo +IMS_DEFAULTREDIRECTURI_5=https://abc123/foo +IMS_CLIENT_ID_6=TYTYTYYUTYEWTEWRW +IMS_CLIENT_SECRET_6=STWEGSDGEVBEGE +IMS_REDIRECT_URI_6=https://abc123/foo2 +IMS_DEFAULTREDIRECTURI_6=https://abc123/foo2 +IMS_CLIENT_ID_7=XXXTYTYTYYUTYEWTEWRW +IMS_CLIENT_SECRET_7=XXXSTWEGSDGEVBEGE +IMS_REDIRECT_URI_7=https://abc123/foo3 +IMS_DEFAULTREDIRECTURI_7=https://abc123/foo3 +IMS_CLIENT_ID_8=YYYYXXXTYTYTYYUTYEWTEWRW +IMS_CLIENT_SECRET_8=YYYYXXXSTWEGSDGEVBEGE +IMS_REDIRECT_URI_8=https://abc123/foo4 +IMS_DEFAULTREDIRECTURI_8=https://abc123/foo4 diff --git a/test/__fixtures__/oauths2s/valid.config.migrate.2.env b/test/__fixtures__/oauths2s/valid.config.migrate.2.env index 9c479d973..9d874954b 100644 --- a/test/__fixtures__/oauths2s/valid.config.migrate.2.env +++ b/test/__fixtures__/oauths2s/valid.config.migrate.2.env @@ -1,33 +1,33 @@ AIO_runtime_auth=Auth AIO_runtime_namespace=Name AIO_runtime_apihost=https://adobeioruntime.net -AIO_ims_contexts_Projéct__A_client__id=XYXYXYXYXYXYXYXYX -AIO_ims_contexts_Projéct__A_client__secret=XYXYXYXYZZZZZZ -AIO_ims_contexts_Projéct__A_redirect__uri=["https://test123"] -AIO_ims_contexts_Projéct__A_defaultRedirectUri=https://test123 -AIO_ims_contexts_PröjectB_client__id=XUXUXUXUXUXUXUX -AIO_ims_contexts_PröjectB_client__secret=XPXPXPXPXPXPXPXPX -AIO_ims_contexts_PröjectB_technical__account__email=XTXTXTXTXTX@techacct.adobe.com -AIO_ims_contexts_PröjectB_technical__account__id=IDIDIDIDID@techacct.adobe.com -AIO_ims_contexts_PröjectB_meta__scopes=["ent_smartcontent_sdk","ent_adobeio_sdk"] -AIO_ims_contexts_PröjectB_ims__org__id=XOXOXOXOXOXOX@AdobeOrg -AIO_ims_contexts_Project__C_client__id=AKAKAKAKAKAKAKAKAKAKAKAK -AIO_ims_contexts_Project__D_client__id=KAKAKAKAKAKAKAKAKAKAKAKA -AIO_ims_contexts_Project__D_redirect__uri=["https://test123"] -AIO_ims_contexts_Project__D_defaultRedirectUri=https://test123 -AIO_ims_contexts_New__Test__Intégration__8_client__id=XRXRXRXRXRXRXRXRXR -AIO_ims_contexts_New__Test__Intégration__8_client__secret=XRXRXRXRXRXRXRXRXRX -AIO_ims_contexts_New__Test__Intégration__8_redirect__uri=["https://abc123/foo"] -AIO_ims_contexts_New__Test__Intégration__8_defaultRedirectUri=https://abc123/foo -AIO_ims_contexts_New__Test__Intégration__9_client__id=TYTYTYYUTYEWTEWRW -AIO_ims_contexts_New__Test__Intégration__9_client__secret=STWEGSDGEVBEGE -AIO_ims_contexts_New__Test__Intégration__9_redirect__uri=["https://abc123/foo2"] -AIO_ims_contexts_New__Test__Intégration__9_defaultRedirectUri=https://abc123/foo2 -AIO_ims_contexts_New__Test__Intégration__10_client__id=XXXTYTYTYYUTYEWTEWRW -AIO_ims_contexts_New__Test__Intégration__10_client__secret=XXXSTWEGSDGEVBEGE -AIO_ims_contexts_New__Test__Intégration__10_redirect__uri=["https://abc123/foo3"] -AIO_ims_contexts_New__Test__Intégration__10_defaultRedirectUri=https://abc123/foo3 -AIO_ims_contexts_New__Test__Intégration__11_client__id=YYYYXXXTYTYTYYUTYEWTEWRW -AIO_ims_contexts_New__Test__Intégration__11_client__secret=YYYYXXXSTWEGSDGEVBEGE -AIO_ims_contexts_New__Test__Intégration__11_redirect__uri=["https://abc123/foo4"] -AIO_ims_contexts_New__Test__Intégration__11_defaultRedirectUri=https://abc123/foo4 +IMS_CLIENT_ID=XYXYXYXYXYXYXYXYX +IMS_CLIENT_SECRET=XYXYXYXYZZZZZZ +IMS_REDIRECT_URI=https://test123 +IMS_DEFAULTREDIRECTURI=https://test123 +IMS_CLIENT_ID_2=XUXUXUXUXUXUXUX +IMS_CLIENT_SECRET_2=XPXPXPXPXPXPXPXPX +IMS_TECHNICAL_ACCOUNT_EMAIL_2=XTXTXTXTXTX@techacct.adobe.com +IMS_TECHNICAL_ACCOUNT_ID_2=IDIDIDIDID@techacct.adobe.com +IMS_META_SCOPES_2=["ent_smartcontent_sdk","ent_adobeio_sdk"] +IMS_ORG_ID_2=XOXOXOXOXOXOX@AdobeOrg +IMS_CLIENT_ID_3=AKAKAKAKAKAKAKAKAKAKAKAK +IMS_CLIENT_ID_4=KAKAKAKAKAKAKAKAKAKAKAKA +IMS_REDIRECT_URI_4=https://test123 +IMS_DEFAULTREDIRECTURI_4=https://test123 +IMS_CLIENT_ID_5=XRXRXRXRXRXRXRXRXR +IMS_CLIENT_SECRET_5=XRXRXRXRXRXRXRXRXRX +IMS_REDIRECT_URI_5=https://abc123/foo +IMS_DEFAULTREDIRECTURI_5=https://abc123/foo +IMS_CLIENT_ID_6=TYTYTYYUTYEWTEWRW +IMS_CLIENT_SECRET_6=STWEGSDGEVBEGE +IMS_REDIRECT_URI_6=https://abc123/foo2 +IMS_DEFAULTREDIRECTURI_6=https://abc123/foo2 +IMS_CLIENT_ID_7=XXXTYTYTYYUTYEWTEWRW +IMS_CLIENT_SECRET_7=XXXSTWEGSDGEVBEGE +IMS_REDIRECT_URI_7=https://abc123/foo3 +IMS_DEFAULTREDIRECTURI_7=https://abc123/foo3 +IMS_CLIENT_ID_8=YYYYXXXTYTYTYYUTYEWTEWRW +IMS_CLIENT_SECRET_8=YYYYXXXSTWEGSDGEVBEGE +IMS_REDIRECT_URI_8=https://abc123/foo4 +IMS_DEFAULTREDIRECTURI_8=https://abc123/foo4 diff --git a/test/__fixtures__/valid.config.env b/test/__fixtures__/valid.config.env index 108ef0021..ca39f45eb 100644 --- a/test/__fixtures__/valid.config.env +++ b/test/__fixtures__/valid.config.env @@ -1,33 +1,33 @@ AIO_runtime_auth=Auth AIO_runtime_namespace=Name AIO_runtime_apihost=https://adobeioruntime.net -AIO_ims_contexts_Projéct__A_client__id=XYXYXYXYXYXYXYXYX -AIO_ims_contexts_Projéct__A_client__secret=XYXYXYXYZZZZZZ -AIO_ims_contexts_Projéct__A_redirect__uri=["https://test123\\\\.com"] -AIO_ims_contexts_Projéct__A_defaultRedirectUri=https://test123 -AIO_ims_contexts_PröjectB_client__id=XUXUXUXUXUXUXUX -AIO_ims_contexts_PröjectB_client__secret=XPXPXPXPXPXPXPXPX -AIO_ims_contexts_PröjectB_technical__account__email=XTXTXTXTXTX@techacct.adobe.com -AIO_ims_contexts_PröjectB_technical__account__id=IDIDIDIDID@techacct.adobe.com -AIO_ims_contexts_PröjectB_meta__scopes=["ent_smartcontent_sdk","ent_adobeio_sdk"] -AIO_ims_contexts_PröjectB_ims__org__id=XOXOXOXOXOXOX@AdobeOrg -AIO_ims_contexts_Project__C_client__id=AKAKAKAKAKAKAKAKAKAKAKAK -AIO_ims_contexts_Project__D_client__id=KAKAKAKAKAKAKAKAKAKAKAKA -AIO_ims_contexts_Project__D_redirect__uri=["https://test123\\\\.com"] -AIO_ims_contexts_Project__D_defaultRedirectUri=https://test123 -AIO_ims_contexts_New__Test__Intégration__8_client__id=XRXRXRXRXRXRXRXRXR -AIO_ims_contexts_New__Test__Intégration__8_client__secret=XRXRXRXRXRXRXRXRXRX -AIO_ims_contexts_New__Test__Intégration__8_redirect__uri=["https://abc123\\\\.com/foo"] -AIO_ims_contexts_New__Test__Intégration__8_defaultRedirectUri=https://abc123/foo -AIO_ims_contexts_New__Test__Intégration__9_client__id=TYTYTYYUTYEWTEWRW -AIO_ims_contexts_New__Test__Intégration__9_client__secret=STWEGSDGEVBEGE -AIO_ims_contexts_New__Test__Intégration__9_redirect__uri=["https://abc123\\\\.com/foo2"] -AIO_ims_contexts_New__Test__Intégration__9_defaultRedirectUri=https://abc123/foo2 -AIO_ims_contexts_New__Test__Intégration__10_client__id=XXXTYTYTYYUTYEWTEWRW -AIO_ims_contexts_New__Test__Intégration__10_client__secret=XXXSTWEGSDGEVBEGE -AIO_ims_contexts_New__Test__Intégration__10_redirect__uri=["https://abc123\\\\.com/foo3"] -AIO_ims_contexts_New__Test__Intégration__10_defaultRedirectUri=https://abc123/foo3 -AIO_ims_contexts_New__Test__Intégration__11_client__id=YYYYXXXTYTYTYYUTYEWTEWRW -AIO_ims_contexts_New__Test__Intégration__11_client__secret=YYYYXXXSTWEGSDGEVBEGE -AIO_ims_contexts_New__Test__Intégration__11_redirect__uri=["https://abc123\\\\.com/foo4"] -AIO_ims_contexts_New__Test__Intégration__11_defaultRedirectUri=https://abc123/foo4 +IMS_CLIENT_ID=XYXYXYXYXYXYXYXYX +IMS_CLIENT_SECRET=XYXYXYXYZZZZZZ +IMS_REDIRECT_URI=https://test123\\.com +IMS_DEFAULTREDIRECTURI=https://test123 +IMS_CLIENT_ID_2=XUXUXUXUXUXUXUX +IMS_CLIENT_SECRET_2=XPXPXPXPXPXPXPXPX +IMS_TECHNICAL_ACCOUNT_EMAIL_2=XTXTXTXTXTX@techacct.adobe.com +IMS_TECHNICAL_ACCOUNT_ID_2=IDIDIDIDID@techacct.adobe.com +IMS_META_SCOPES_2=["ent_smartcontent_sdk","ent_adobeio_sdk"] +IMS_ORG_ID_2=XOXOXOXOXOXOX@AdobeOrg +IMS_CLIENT_ID_3=AKAKAKAKAKAKAKAKAKAKAKAK +IMS_CLIENT_ID_4=KAKAKAKAKAKAKAKAKAKAKAKA +IMS_REDIRECT_URI_4=https://test123\\.com +IMS_DEFAULTREDIRECTURI_4=https://test123 +IMS_CLIENT_ID_5=XRXRXRXRXRXRXRXRXR +IMS_CLIENT_SECRET_5=XRXRXRXRXRXRXRXRXRX +IMS_REDIRECT_URI_5=https://abc123\\.com/foo +IMS_DEFAULTREDIRECTURI_5=https://abc123/foo +IMS_CLIENT_ID_6=TYTYTYYUTYEWTEWRW +IMS_CLIENT_SECRET_6=STWEGSDGEVBEGE +IMS_REDIRECT_URI_6=https://abc123\\.com/foo2 +IMS_DEFAULTREDIRECTURI_6=https://abc123/foo2 +IMS_CLIENT_ID_7=XXXTYTYTYYUTYEWTEWRW +IMS_CLIENT_SECRET_7=XXXSTWEGSDGEVBEGE +IMS_REDIRECT_URI_7=https://abc123\\.com/foo3 +IMS_DEFAULTREDIRECTURI_7=https://abc123/foo3 +IMS_CLIENT_ID_8=YYYYXXXTYTYTYYUTYEWTEWRW +IMS_CLIENT_SECRET_8=YYYYXXXSTWEGSDGEVBEGE +IMS_REDIRECT_URI_8=https://abc123\\.com/foo4 +IMS_DEFAULTREDIRECTURI_8=https://abc123/foo4 diff --git a/test/commands/lib/import-helper.test.js b/test/commands/lib/import-helper.test.js index 130fb70f3..dd362126e 100644 --- a/test/commands/lib/import-helper.test.js +++ b/test/commands/lib/import-helper.test.js @@ -84,6 +84,23 @@ test('flattenObjectWithSeparator', () => { }) }) +test('flattenObjectWithSeparator with arrays', () => { + const json = { + foo: 'a', + arrayField: ['item1', 'item2', 'item3'], + nested: { + arrayInside: [1, 2, 3] + } + } + + const result = flattenObjectWithSeparator(json, {}) + expect(result).toEqual({ + AIO_foo: 'a', + AIO_arrayField: JSON.stringify(['item1', 'item2', 'item3']), + AIO_nested_arrayInside: JSON.stringify([1, 2, 3]) + }) +}) + test('writeAio', async () => { const hjson = fixtureHjson('writeaio.hjson') const parentFolder = 'my-parent-folder' @@ -421,6 +438,23 @@ test('do not enrich ims.contexts.jwt with ims_org_id if no jwt credentials defin expect(fs.writeFile).toHaveBeenCalledTimes(2) }) +test('api_key credential with api_key field', async () => { + const workingFolder = 'my-working-folder' + const aioPath = path.join(workingFolder, '.aio') + const envPath = path.join(workingFolder, '.env') + const configPath = '/some/config/path' + + fs.readFileSync.mockReturnValueOnce(fixtureFile('config.apikey.json')) + await importConfigJson(configPath, workingFolder, { overwrite: true }) + await expect(fs.writeFile.mock.calls[0][0]).toMatch(envPath) + await expect(fs.writeFile.mock.calls[0][1]).toMatchFixture('config.apikey.env') + await expect(fs.writeFile.mock.calls[0][2]).toMatchObject({ flag: 'w' }) + await expect(fs.writeFile.mock.calls[1][0]).toMatch(aioPath) + await expect(fs.writeFile.mock.calls[1][1]).toMatchFixture('config.apikey.aio') + await expect(fs.writeFile.mock.calls[1][2]).toMatchObject({ flag: 'w' }) + expect(fs.writeFile).toHaveBeenCalledTimes(2) +}) + describe('getServiceApiKey', () => { test('bad config file', () => { expect(getServiceApiKey(undefined)).toEqual('')