diff --git a/src/persistence/BaseMCWSPersistenceProvider.js b/src/persistence/BaseMCWSPersistenceProvider.js index 9661862..36912ce 100644 --- a/src/persistence/BaseMCWSPersistenceProvider.js +++ b/src/persistence/BaseMCWSPersistenceProvider.js @@ -117,7 +117,7 @@ export default class BaseMCWSPersistenceProvider { const user = await this.openmct.user.getCurrentUser(); const containedNamespaces = await this.getNamespacesFromMCWS(namespaceDefinition); - const userNamespace = interpolateUsername(namespaceTemplate, user.id); + const userNamespace = interpolateUsername(namespaceTemplate, user.id, user.name); const existingUserNamespace = containedNamespaces.find( (namespace) => namespace.url === userNamespace.url ); @@ -185,6 +185,7 @@ export default class BaseMCWSPersistenceProvider { * * @private * @param {NamespaceDefinition} namespaceDefinition + * @param {string} userId the user ID * @returns {Promise.|Promise.} */ async createIfMissing(namespaceDefinition, userId) { diff --git a/src/persistence/test/MCWSNamespaceServiceSpec.js b/src/persistence/test/MCWSNamespaceServiceSpec.js index 7ec2fb2..92c454a 100644 --- a/src/persistence/test/MCWSNamespaceServiceSpec.js +++ b/src/persistence/test/MCWSNamespaceServiceSpec.js @@ -99,10 +99,10 @@ describe('MCWSNamespaceService', () => { url: '/some/personal/namespace', containsNamespaces: true, childTemplate: { - id: 'personal-${USER}:root', - key: 'personal-${USER}', - name: '${USER}', - url: '/some/personal/namespace/${USER}' + id: 'personal-${USERID}:root', + key: 'personal-${USERID}', + name: '${USERNAME}', + url: '/some/personal/namespace/${USERID}' } }; inaccessibleContainerRootDefinition = { @@ -112,10 +112,10 @@ describe('MCWSNamespaceService', () => { url: '/inaccessible/personal/namespace', containsNamespaces: true, childTemplate: { - id: 'inaccessible-personal-${USER}:root', - key: 'inaccessible-personal-${USER}', - name: '${USER}', - url: '/inaccessible/personal/namespace/${USER}' + id: 'inaccessible-personal-${USERID}:root', + key: 'inaccessible-personal-${USERID}', + name: '${USERNAME}', + url: '/inaccessible/personal/namespace/${USERID}' } }; missingContainerRootDefinition = { @@ -125,10 +125,10 @@ describe('MCWSNamespaceService', () => { url: '/missing/personal/namespace', containsNamespaces: true, childTemplate: { - id: 'missing-personal-${USER}:root', - key: 'missing-personal-${USER}', - name: '${USER}', - url: '/missing/personal/namespace/${USER}' + id: 'missing-personal-${USERID}:root', + key: 'missing-personal-${USERID}', + name: '${USERNAME}', + url: '/missing/personal/namespace/${USERID}' } }; diff --git a/src/persistence/utils.js b/src/persistence/utils.js index 5c35429..f770007 100644 --- a/src/persistence/utils.js +++ b/src/persistence/utils.js @@ -47,10 +47,10 @@ export function createNamespace(namespace) { url: namespace.url, containsNamespaces: true, childTemplate: { - id: namespace.key + '-${USER}' + ROOT_NAMESPACE_SUFFIX, - key: namespace.key + '-${USER}', - name: '${USER}', - url: namespace.url + '/${USER}' + id: namespace.key + '-${USERID}' + ROOT_NAMESPACE_SUFFIX, + key: namespace.key + '-${USERID}', + name: '${USERNAME}', + url: namespace.url + '/${USERID}' } }; } else { @@ -65,18 +65,20 @@ export function createNamespace(namespace) { /** * Interpolate a username with all values in a supplied object, replacing - * '${USER}' with the supplied username. + * '${USERNAME}' with the supplied username and '${USERID}' with the + * supplied user ID. * * @private * @param {NamespaceTemplate} templateObject namespace template object. - * @param {string} username a username. + * @param {string} userId the user ID + * @param {string} username the username (default is userId) * @returns {NamespaceDefinition} a namespace definition object. */ -export function interpolateUsername(templateObject, username) { +export function interpolateUsername(templateObject, userId, username = userId) { const namespaceDefinition = {}; Object.keys(templateObject).forEach((key) => { - namespaceDefinition[key] = templateObject[key].replace('${USER}', username); + namespaceDefinition[key] = templateObject[key].replace('${USERNAME}', username).replace('${USERID}', userId); }); return namespaceDefinition; diff --git a/src/services/identity/createMCWSUser.js b/src/services/identity/createMCWSUser.js index adb1609..d2012f3 100644 --- a/src/services/identity/createMCWSUser.js +++ b/src/services/identity/createMCWSUser.js @@ -8,7 +8,7 @@ export default function createMCWSUser(UserClass) { * @param {MCWSUserInfo} userInfo */ constructor(name) { - super(name, name); // no id is returned, so we use name twice + super(String(name).replace(/[^a-zA-Z0-9]/g, ''), name); } }; }