Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion schema/config.schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -238,7 +238,8 @@
"api_key": {
"type": "object",
"properties": {
"client_id": { "type": "string" }
"client_id": { "type": "string" },
"api_key": { "type": "string" }
},
"required": ["client_id"]
},
Expand Down
57 changes: 54 additions & 3 deletions src/lib/import-helper.js
Original file line number Diff line number Diff line change
Expand Up @@ -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.
*
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -748,5 +798,6 @@ module.exports = {
mergeEnv,
splitEnvLine,
getProjectCredentialType,
formatImsCredentialsForEnv,
CONSOLE_CONFIG_KEY
}
31 changes: 31 additions & 0 deletions test/__fixtures__/config.apikey.aio
Original file line number Diff line number Diff line change
@@ -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": []
}
}
}
}
5 changes: 5 additions & 0 deletions test/__fixtures__/config.apikey.env
Original file line number Diff line number Diff line change
@@ -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
44 changes: 44 additions & 0 deletions test/__fixtures__/config.apikey.json
Original file line number Diff line number Diff line change
@@ -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"
}
]
}
}
}
}
}

20 changes: 10 additions & 10 deletions test/__fixtures__/config.orgid.env
Original file line number Diff line number Diff line change
@@ -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
8 changes: 4 additions & 4 deletions test/__fixtures__/config.orgid.no.jwt.env
Original file line number Diff line number Diff line change
@@ -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
60 changes: 30 additions & 30 deletions test/__fixtures__/existing.merged.env
Original file line number Diff line number Diff line change
Expand Up @@ -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
60 changes: 30 additions & 30 deletions test/__fixtures__/oauths2s/valid.config.env
Original file line number Diff line number Diff line change
@@ -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
60 changes: 30 additions & 30 deletions test/__fixtures__/oauths2s/valid.config.migrate.1.env
Original file line number Diff line number Diff line change
@@ -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
Loading