diff --git a/services/web/app/src/Features/Project/ProjectDetailsHandler.js b/services/web/app/src/Features/Project/ProjectDetailsHandler.js index c52025e21f..141d01a56f 100644 --- a/services/web/app/src/Features/Project/ProjectDetailsHandler.js +++ b/services/web/app/src/Features/Project/ProjectDetailsHandler.js @@ -27,6 +27,7 @@ module.exports = { generateUniqueName: callbackify(generateUniqueName), setPublicAccessLevel: callbackify(setPublicAccessLevel), ensureTokensArePresent: callbackify(ensureTokensArePresent), + clearTokens: callbackify(clearTokens), fixProjectName, promises: { getDetails, @@ -37,7 +38,8 @@ module.exports = { validateProjectName, generateUniqueName, setPublicAccessLevel, - ensureTokensArePresent + ensureTokensArePresent, + clearTokens } } @@ -276,6 +278,13 @@ async function ensureTokensArePresent(projectId) { return project.tokens } +async function clearTokens(projectId) { + await Project.update( + { _id: projectId }, + { $unset: { tokens: 1 }, $set: { publicAccesLevel: 'private' } } + ).exec() +} + async function _generateTokens(project, callback) { if (!project.tokens) { project.tokens = {} diff --git a/services/web/scripts/clear_project_tokens.js b/services/web/scripts/clear_project_tokens.js new file mode 100644 index 0000000000..04a8cafadb --- /dev/null +++ b/services/web/scripts/clear_project_tokens.js @@ -0,0 +1,19 @@ +const ProjectDetailsHandler = require('../app/src/Features/Project/ProjectDetailsHandler') +const projectId = process.argv[2] + +if (!/^(?=[a-f\d]{24}$)(\d+[a-f]|[a-f]+\d)/.test(projectId)) { + console.error('Usage: node clear_project_tokens.js projectId') + process.exit(1) +} + +ProjectDetailsHandler.clearTokens(projectId, err => { + if (err) { + console.error( + `Error clearing project tokens from project ${projectId}`, + err + ) + process.exit(1) + } + console.log(`Successfully cleared project tokens from project ${projectId}`) + process.exit(0) +}) diff --git a/services/web/test/unit/src/Project/ProjectDetailsHandlerTests.js b/services/web/test/unit/src/Project/ProjectDetailsHandlerTests.js index af11515012..46e6acfae3 100644 --- a/services/web/test/unit/src/Project/ProjectDetailsHandlerTests.js +++ b/services/web/test/unit/src/Project/ProjectDetailsHandlerTests.js @@ -640,4 +640,14 @@ describe('ProjectDetailsHandler', function() { }) }) }) + + describe('clearTokens', function() { + it('clears the tokens from the project', async function() { + await this.handler.promises.clearTokens(this.project._id) + expect(this.ProjectModel.update).to.have.been.calledWith( + { _id: this.project._id }, + { $unset: { tokens: 1 }, $set: { publicAccesLevel: 'private' } } + ) + }) + }) })