diff --git a/docs/swagger.yaml b/docs/swagger.yaml index c4ca74da..371995b5 100644 --- a/docs/swagger.yaml +++ b/docs/swagger.yaml @@ -6180,9 +6180,6 @@ definitions: email: type: string description: The user email - hashEmail: - type: string - description: The email hash value role: description: The user role in the project type: string diff --git a/migrations/20200214_project_member_invites_hash_email.sql b/migrations/20200214_project_member_invites_hash_email.sql deleted file mode 100644 index ea8015c6..00000000 --- a/migrations/20200214_project_member_invites_hash_email.sql +++ /dev/null @@ -1,10 +0,0 @@ --- --- UPDATE EXISTING TABLES: --- project_member_invites: --- added column `hashEmail` - --- --- project_member_invites - --- Add new column -ALTER TABLE project_member_invites ADD COLUMN "hashEmail" character varying(255) ; diff --git a/package-lock.json b/package-lock.json index 988c1c6e..1727a18f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2033,11 +2033,6 @@ "supports-color": "^2.0.0" } }, - "charenc": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", - "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=" - }, "check-error": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", @@ -2243,7 +2238,6 @@ "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, "requires": { "color-name": "1.1.3" } @@ -2251,8 +2245,7 @@ "color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, "colors": { "version": "1.4.0", @@ -2494,11 +2487,6 @@ "which": "^1.2.9" } }, - "crypt": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", - "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=" - }, "crypto-js": { "version": "3.1.9-1", "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-3.1.9-1.tgz", @@ -2693,6 +2681,11 @@ "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", "dev": true }, + "diff-match-patch": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/diff-match-patch/-/diff-match-patch-1.0.4.tgz", + "integrity": "sha512-Uv3SW8bmH9nAtHKaKSanOQmj2DnlH65fUpcrMdfdaOxUG02QQ4YGZ8AE7kKOMisF7UqvOlGKVYWRvezdncW9lg==" + }, "doctrine": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", @@ -3658,7 +3651,8 @@ "ansi-regex": { "version": "2.1.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "aproba": { "version": "1.2.0", @@ -3679,12 +3673,14 @@ "balanced-match": { "version": "1.0.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "brace-expansion": { "version": "1.1.11", "bundled": true, "dev": true, + "optional": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -3699,17 +3695,20 @@ "code-point-at": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "concat-map": { "version": "0.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "console-control-strings": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "core-util-is": { "version": "1.0.2", @@ -3826,7 +3825,8 @@ "inherits": { "version": "2.0.4", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "ini": { "version": "1.3.5", @@ -3838,6 +3838,7 @@ "version": "1.0.0", "bundled": true, "dev": true, + "optional": true, "requires": { "number-is-nan": "^1.0.0" } @@ -3852,6 +3853,7 @@ "version": "3.0.4", "bundled": true, "dev": true, + "optional": true, "requires": { "brace-expansion": "^1.1.7" } @@ -3859,12 +3861,14 @@ "minimist": { "version": "0.0.8", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "minipass": { "version": "2.9.0", "bundled": true, "dev": true, + "optional": true, "requires": { "safe-buffer": "^5.1.2", "yallist": "^3.0.0" @@ -3883,6 +3887,7 @@ "version": "0.5.1", "bundled": true, "dev": true, + "optional": true, "requires": { "minimist": "0.0.8" } @@ -3972,7 +3977,8 @@ "number-is-nan": { "version": "1.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "object-assign": { "version": "4.1.1", @@ -3984,6 +3990,7 @@ "version": "1.4.0", "bundled": true, "dev": true, + "optional": true, "requires": { "wrappy": "1" } @@ -4069,7 +4076,8 @@ "safe-buffer": { "version": "5.1.2", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "safer-buffer": { "version": "2.1.2", @@ -4105,6 +4113,7 @@ "version": "1.0.2", "bundled": true, "dev": true, + "optional": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -4124,6 +4133,7 @@ "version": "3.0.1", "bundled": true, "dev": true, + "optional": true, "requires": { "ansi-regex": "^2.0.0" } @@ -4167,12 +4177,14 @@ "wrappy": { "version": "1.0.2", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "yallist": { "version": "3.1.1", "bundled": true, - "dev": true + "dev": true, + "optional": true } } }, @@ -4255,6 +4267,7 @@ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", "dev": true, + "optional": true, "requires": { "is-glob": "^2.0.0" } @@ -4309,7 +4322,6 @@ "version": "4.7.2", "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.2.tgz", "integrity": "sha512-4PwqDL2laXtTWZghzzCtunQUTLbo31pcCJrd/B/9JP8XbhVzpS5ZXuKqlOzsd1rtcaLo4KqAn8nl8mkknS4MHw==", - "dev": true, "requires": { "neo-async": "^2.6.0", "optimist": "^0.6.1", @@ -4652,7 +4664,8 @@ "is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true }, "is-callable": { "version": "1.1.5", @@ -4730,7 +4743,8 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true + "dev": true, + "optional": true }, "is-finite": { "version": "1.0.2", @@ -4761,6 +4775,7 @@ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", "dev": true, + "optional": true, "requires": { "is-extglob": "^1.0.0" } @@ -5272,6 +5287,48 @@ "minimist": "^1.2.0" } }, + "jsondiffpatch": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/jsondiffpatch/-/jsondiffpatch-0.4.1.tgz", + "integrity": "sha512-t0etAxTUk1w5MYdNOkZBZ8rvYYN5iL+2dHCCx/DpkFm/bW28M6y5nUS83D4XdZiHy35Fpaw6LBb+F88fHZnVCw==", + "requires": { + "chalk": "^2.3.0", + "diff-match-patch": "^1.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, "jsonfile": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", @@ -5670,16 +5727,6 @@ "dev": true, "optional": true }, - "md5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/md5/-/md5-2.2.1.tgz", - "integrity": "sha1-U6s41f48iJG6RlMp6iP6wFQBJvk=", - "requires": { - "charenc": "~0.0.1", - "crypt": "~0.0.1", - "is-buffer": "~1.1.1" - } - }, "media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -6049,8 +6096,7 @@ "neo-async": { "version": "2.6.1", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", - "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==", - "dev": true + "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==" }, "next-tick": { "version": "1.0.0", @@ -6544,6 +6590,7 @@ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", "dev": true, + "optional": true, "requires": { "remove-trailing-separator": "^1.0.1" } @@ -6729,7 +6776,6 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", - "dev": true, "requires": { "minimist": "~0.0.1", "wordwrap": "~0.0.2" @@ -6738,14 +6784,12 @@ "minimist": { "version": "0.0.10", "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", - "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=", - "dev": true + "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=" }, "wordwrap": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", - "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", - "dev": true + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=" } } }, @@ -8438,14 +8482,6 @@ "escodegen": "^1.8.1" } }, - "static-eval": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-2.0.2.tgz", - "integrity": "sha512-N/D219Hcr2bPjLxPiV+TQE++Tsmrady7TqAJugLy7Xk1EumfDWS/f5dtBbkRCGE7wKKXuYockQoj8Rm2/pVKyg==", - "requires": { - "escodegen": "^1.8.1" - } - }, "static-extend": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", @@ -8899,7 +8935,6 @@ "version": "3.7.7", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.7.7.tgz", "integrity": "sha512-FeSU+hi7ULYy6mn8PKio/tXsdSXN35lm4KgV2asx00kzrLU9Pi3oAslcJT70Jdj7PHX29gGUPOT6+lXGBbemhA==", - "dev": true, "optional": true, "requires": { "commander": "~2.20.3", diff --git a/package.json b/package.json index e84055e9..e1ccee32 100644 --- a/package.json +++ b/package.json @@ -62,7 +62,6 @@ "jsonpath": "^1.0.2", "jsonwebtoken": "^8.3.0", "lodash": "^4.17.11", - "md5": "^2.2.1", "memwatch-next": "^0.3.0", "method-override": "^2.3.9", "moment": "^2.22.2", diff --git a/src/models/projectMemberInvite.js b/src/models/projectMemberInvite.js index 48de67b9..d19db4cf 100644 --- a/src/models/projectMemberInvite.js +++ b/src/models/projectMemberInvite.js @@ -27,10 +27,6 @@ module.exports = function defineProjectMemberInvite(sequelize, DataTypes) { isIn: [_.values(INVITE_STATUS)], }, }, - hashEmail: { - type: DataTypes.STRING, - allowNull: true, - }, createdAt: { type: DataTypes.DATE, defaultValue: DataTypes.NOW }, updatedAt: { type: DataTypes.DATE, defaultValue: DataTypes.NOW }, deletedAt: { type: DataTypes.DATE, allowNull: true }, diff --git a/src/routes/projectMemberInvites/create.js b/src/routes/projectMemberInvites/create.js index a3830b8b..fe8e1897 100644 --- a/src/routes/projectMemberInvites/create.js +++ b/src/routes/projectMemberInvites/create.js @@ -5,7 +5,6 @@ import _ from 'lodash'; import Joi from 'joi'; import config from 'config'; import { middleware as tcMiddleware } from 'tc-core-library-js'; -import md5 from 'md5'; import models from '../../models'; import util from '../../util'; import { PROJECT_MEMBER_ROLE, PROJECT_MEMBER_MANAGER_ROLES, @@ -154,9 +153,6 @@ const buildCreateInvitePromises = (req, inviteEmails, inviteUserIds, invites, da dataNew.userId = user.id; dataNew.email = user.email ? user.email.toLowerCase() : user.email; - if (user.email) { - dataNew.hashEmail = md5(dataNew.email); - } invitePromises.push(models.ProjectMemberInvite.create(dataNew)); }); @@ -179,7 +175,6 @@ const buildCreateInvitePromises = (req, inviteEmails, inviteUserIds, invites, da const dataNew = _.clone(data); dataNew.email = email.toLowerCase(); - dataNew.hashEmail = md5(dataNew.email); invitePromises.push(models.ProjectMemberInvite.create(dataNew)); }); diff --git a/src/routes/projectMemberInvites/create.spec.js b/src/routes/projectMemberInvites/create.spec.js index fb59767b..3cc20468 100644 --- a/src/routes/projectMemberInvites/create.spec.js +++ b/src/routes/projectMemberInvites/create.spec.js @@ -3,7 +3,6 @@ import _ from 'lodash'; import chai from 'chai'; import sinon from 'sinon'; import request from 'supertest'; -import md5 from 'md5'; import models from '../../models'; import util from '../../util'; @@ -105,7 +104,6 @@ describe('Project Member Invite create', () => { models.ProjectMemberInvite.create({ projectId: project1.id, email: 'duplicate_lowercase@test.com', - hashEmail: md5('duplicate_lowercase@test.com'), role: PROJECT_MEMBER_ROLE.MANAGER, status: INVITE_STATUS.PENDING, createdBy: 1, @@ -116,7 +114,6 @@ describe('Project Member Invite create', () => { models.ProjectMemberInvite.create({ projectId: project1.id, email: 'DUPLICATE_UPPERCASE@test.com', - hashEmail: md5('DUPLICATE_UPPERCASE@test.com'), role: PROJECT_MEMBER_ROLE.MANAGER, status: INVITE_STATUS.PENDING, createdBy: 1, @@ -127,7 +124,6 @@ describe('Project Member Invite create', () => { models.ProjectMemberInvite.create({ projectId: project1.id, email: 'with.dot@gmail.com', - hashEmail: md5('with.dot@gmail.com'), role: PROJECT_MEMBER_ROLE.MANAGER, status: INVITE_STATUS.PENDING, createdBy: 1, @@ -138,7 +134,6 @@ describe('Project Member Invite create', () => { models.ProjectMemberInvite.create({ projectId: project1.id, email: 'withoutdot@gmail.com', - hashEmail: md5('withoutdot@gmail.com'), role: PROJECT_MEMBER_ROLE.MANAGER, status: INVITE_STATUS.PENDING, createdBy: 1, @@ -244,7 +239,6 @@ describe('Project Member Invite create', () => { resJson.role.should.equal('customer'); resJson.projectId.should.equal(project1.id); resJson.email.should.equal('hello@world.com'); - resJson.hashEmail.should.equal(md5('hello@world.com')); server.services.pubsub.publish.calledWith('project.member.invite.created').should.be.true; done(); } @@ -394,7 +388,6 @@ describe('Project Member Invite create', () => { resJson.role.should.equal('customer'); resJson.projectId.should.equal(project2.id); resJson.email.should.equal('hello@world.com'); - resJson.hashEmail.should.equal(md5('hello@world.com')); server.services.pubsub.publish.calledWith('project.member.invite.created').should.be.true; done(); } @@ -495,7 +488,6 @@ describe('Project Member Invite create', () => { resJson.projectId.should.equal(project2.id); resJson.userId.should.equal(40051331); should.not.exist(resJson.email); - should.not.exist(resJson.hashEmail); server.services.pubsub.publish.calledWith('project.member.invite.created').should.be.true; done(); } diff --git a/src/routes/projectMemberInvites/delete.spec.js b/src/routes/projectMemberInvites/delete.spec.js index 502f4683..da337807 100644 --- a/src/routes/projectMemberInvites/delete.spec.js +++ b/src/routes/projectMemberInvites/delete.spec.js @@ -3,7 +3,6 @@ import _ from 'lodash'; import request from 'supertest'; import sinon from 'sinon'; import chai from 'chai'; -import md5 from 'md5'; import models from '../../models'; import server from '../../app'; import util from '../../util'; @@ -137,7 +136,6 @@ describe('Project member invite delete', () => { projectId: project2.id, userId: null, email: 'romit.choudhary@rivigo.com', - hashEmail: md5('romit.choudhary@rivigo.com'), role: PROJECT_MEMBER_ROLE.CUSTOMER, status: INVITE_STATUS.PENDING, createdBy: 1, diff --git a/src/routes/projectMemberInvites/get.spec.js b/src/routes/projectMemberInvites/get.spec.js index 9f11b1a4..4120c1f4 100644 --- a/src/routes/projectMemberInvites/get.spec.js +++ b/src/routes/projectMemberInvites/get.spec.js @@ -1,7 +1,6 @@ /* eslint-disable no-unused-expressions */ import chai from 'chai'; import request from 'supertest'; -import md5 from 'md5'; import models from '../../models'; import server from '../../app'; @@ -85,7 +84,6 @@ describe('GET Project Member Invite', () => { id: 3, userId: null, email: 'test@topcoder.com', - hashEmail: md5('test@topcoder.com'), projectId: project2.id, role: 'customer', createdBy: 1, @@ -230,7 +228,6 @@ describe('GET Project Member Invite', () => { should.exist(resJson.projectId); resJson.id.should.be.eql(3); resJson.email.should.be.eql('t***t@t***r.com'); // masked - resJson.hashEmail.should.be.eql(md5('test@topcoder.com')); resJson.status.should.be.eql(INVITE_STATUS.PENDING); done(); } diff --git a/src/routes/projectMemberInvites/list.spec.js b/src/routes/projectMemberInvites/list.spec.js index 10631634..56388f2e 100644 --- a/src/routes/projectMemberInvites/list.spec.js +++ b/src/routes/projectMemberInvites/list.spec.js @@ -2,7 +2,6 @@ import _ from 'lodash'; import chai from 'chai'; import request from 'supertest'; -import md5 from 'md5'; import models from '../../models'; import server from '../../app'; @@ -86,7 +85,6 @@ describe('GET Project Member Invites', () => { id: 3, userId: null, email: 'test@topcoder.com', - hashEmail: md5('test@topcoder.com'), projectId: project2.id, role: 'customer', createdBy: 1, diff --git a/src/routes/projectMemberInvites/update.spec.js b/src/routes/projectMemberInvites/update.spec.js index 57132339..bd1b6c3c 100644 --- a/src/routes/projectMemberInvites/update.spec.js +++ b/src/routes/projectMemberInvites/update.spec.js @@ -3,7 +3,6 @@ import _ from 'lodash'; import request from 'supertest'; import sinon from 'sinon'; import chai from 'chai'; -import md5 from 'md5'; import models from '../../models'; import server from '../../app'; import util from '../../util'; @@ -138,7 +137,6 @@ describe('Project member invite update', () => { projectId: project2.id, userId: null, email: 'romit.choudhary@rivigo.com', - hashEmail: md5('romit.choudhary@rivigo.com'), role: PROJECT_MEMBER_ROLE.CUSTOMER, status: INVITE_STATUS.PENDING, createdBy: 1,