Skip to content

Commit c9a14c9

Browse files
Ritesh Sangwanparthshah
Ritesh Sangwan
authored andcommitted
fix lint errors (#48)
1 parent 744ef82 commit c9a14c9

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

46 files changed

+1581
-1348
lines changed

.eslintrc

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@
88
"mocha": true
99
},
1010
"rules": {
11-
"import/no-extraneous-dependencies": ["error", {"devDependencies": ["**/*.test.js", "**/*.spec.js"]}],
11+
"import/no-extraneous-dependencies": ["error", {"devDependencies": ["**/*.test.js", "**/*.spec.js", "**/serviceMocks.js"]}],
12+
max-len: ["error", { "ignoreComments": true, code: 120 }],
1213
"valid-jsdoc": ["error", {
1314
"requireReturn": true,
1415
"requireReturnType": true,

migrations/sync.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11

22

3+
/* eslint-disable no-console */
34
/**
45
* Sync the database models to db tables.
56
*/
@@ -10,7 +11,7 @@
1011
*/
1112
// process.env.NODE_ENV = 'development'
1213

13-
require('./dist/models').default.sequelize.sync({ force: true })
14+
require('../dist/models').default.sequelize.sync({ force: true })
1415
.then(() => {
1516
console.log('Database synced successfully');
1617
process.exit();

src/events/projects/index.js

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
1-
import config from 'config';
2-
import querystring from 'querystring';
3-
import util from '../../util';
1+
42

53
/**
64
* Creates a lead in salesforce for the connect project.

src/index.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11

2+
23
const app = require('./app');
34
const coreLib = require('tc-core-library-js');
45
const expressListRoutes = require('express-list-routes');

src/middlewares/checkRole.js

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,16 @@
77
* @version 1.0
88
*/
99
import config from 'config';
10+
1011
const util = require('tc-core-library-js').util(config);
1112

12-
module.exports = function (roleName) {
13-
return function (req, res, next) {
14-
if (!req.authUser || !Array.isArray(req.authUser.roles) || req.authUser.roles.indexOf(roleName) == -1) {
13+
module.exports = function defineCheckRole(roleName) {
14+
return function checkRoleMiddleware(req, res, next) {
15+
if (!req.authUser || !Array.isArray(req.authUser.roles) ||
16+
req.authUser.roles.indexOf(roleName) === -1) {
1517
return res.status(403)
16-
.json(util.wrapErrorResponse(req.id, 403, 'You are not allowed to perform this action.'));
18+
.json(util.wrapErrorResponse(req.id, 403, 'You are not allowed to perform this action.'));
1719
}
18-
next();
20+
return next();
1921
};
2022
};

src/mocks/addBillingAccount.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1+
/* eslint-disable max-len */
2+
13
const http = require('https');
4+
const _ = require('lodash');
25

36
const options = {
47
method: 'POST',
@@ -21,10 +24,7 @@ const req = http.request(options, (res) => {
2124
chunks.push(chunk);
2225
});
2326

24-
res.on('end', () => {
25-
const body = Buffer.concat(chunks);
26-
console.log(body.toString());
27-
});
27+
res.on('end', _.noop);
2828
});
2929
req.write('{\n "billingAccountId": 123456789\n}');
3030
req.end();

src/mocks/addCopilot.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1+
/* eslint-disable max-len */
2+
13
const http = require('https');
4+
const _ = require('lodash');
25

36
const options = {
47
method: 'POST',
@@ -21,10 +24,7 @@ const req = http.request(options, (res) => {
2124
chunks.push(chunk);
2225
});
2326

24-
res.on('end', () => {
25-
const body = Buffer.concat(chunks);
26-
console.log(body.toString());
27-
});
27+
res.on('end', _.noop);
2828
});
2929
req.write('{\n "copilotUserId": 123456789\n}');
3030
req.end();

src/mocks/createProject.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1+
/* eslint-disable max-len */
2+
13
const http = require('https');
4+
const _ = require('lodash');
25

36
const options = {
47
method: 'POST',
@@ -21,10 +24,7 @@ const req = http.request(options, (res) => {
2124
chunks.push(chunk);
2225
});
2326

24-
res.on('end', () => {
25-
const body = Buffer.concat(chunks);
26-
console.log(body.toString());
27-
});
27+
res.on('end', _.noop);
2828
});
2929

3030
req.write('{\n "projectName": "Tony Test 1",\n "projectDescription": "test 1 description"\n}');

src/mocks/direct.js

Lines changed: 32 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,20 @@
11

22

3-
import express from 'express';
3+
import express, { Router } from 'express';
44
import _ from 'lodash';
55
import bodyParser from 'body-parser';
66
import config from 'config';
77
import coreLib from 'tc-core-library-js';
88
import expressRequestId from 'express-request-id';
9-
import Router from 'express';
109
import https from 'https';
1110
import path from 'path';
1211
import fs from 'fs';
13-
config.version = 'v3';
12+
1413
const util = require('tc-core-library-js').util(config);
14+
const jwtAuth = require('tc-core-library-js').middleware.jwtAuthenticator;
15+
16+
config.version = 'v3';
17+
1518
const app = express();
1619
app.use(bodyParser.urlencoded({
1720
extended: false,
@@ -33,10 +36,9 @@ app.use(coreLib.middleware.logger(null, logger));
3336
app.logger = logger;
3437

3538
const router = Router();
36-
const jwtAuth = require('tc-core-library-js').middleware.jwtAuthenticator;
3739
router.all('/v3/direct/projects*', jwtAuth());
3840

39-
let projectId = 2;
41+
const projectId = 2;
4042
const projects = {
4143
1: {
4244
projectName: 'test direct project1',
@@ -53,57 +55,59 @@ router.route('/v3/direct/projects')
5355
app.logger.info('get direct projects');
5456
res.json(util.wrapResponse(req.id, { projects }));
5557
})
56-
.post((req, res) => {
58+
.post((freq, res) => {
59+
const req = freq;
5760
app.logger.info({ body: req.body }, 'create direct project');
58-
const newId = projectId++;
61+
const newId = projectId + 1;
5962
req.body.id = newId;
6063
projects[newId] = req.body;
6164
res.json(util.wrapResponse(req.id, { projectId: newId }));
6265
});
6366

6467
router.route('/v3/direct/projects/:projectId(\\d+)/billingaccount')
6568
.post((req, res) => {
66-
const projectId = req.params.projectId;
67-
app.logger.info({ body: req.body, projectId }, 'add billingaccount to Project');
68-
if (projects[projectId]) {
69-
projects[projectId] = _.merge(projects[projectId], req.body);
70-
res.json(util.wrapResponse(req.id, { billingAccountName: `mock account name for ${req.body.billingAccountId}` }));
69+
const pId = req.params.projectId;
70+
app.logger.info({ body: req.body, pId }, 'add billingaccount to Project');
71+
if (projects[pId]) {
72+
projects[pId] = _.merge(projects[pId], req.body);
73+
res.json(util.wrapResponse(req.id, { billingAccountName: 'mock account name for ' +
74+
`${req.body.billingAccountId}` }));
7175
} else {
72-
res.json(util.wrapErrorResponse(req.id, 404, `Cannot find direct project ${projectId}`));
76+
res.json(util.wrapErrorResponse(req.id, 404, `Cannot find direct project ${pId}`));
7377
}
7478
});
7579

7680

7781
router.route('/v3/direct/projects/:projectId(\\d+)/copilot')
7882
.post((req, res) => {
79-
const projectId = req.params.projectId;
80-
app.logger.info({ body: req.body, projectId }, 'add copilot to Project');
81-
if (projects[projectId]) {
82-
projects[projectId] = _.merge(projects[projectId], req.body);
83-
res.json(util.wrapResponse(req.id, { copilotProjectId: projectId }));
83+
const pId = req.params.projectId;
84+
app.logger.info({ body: req.body, pId }, 'add copilot to Project');
85+
if (projects[pId]) {
86+
projects[pId] = _.merge(projects[pId], req.body);
87+
res.json(util.wrapResponse(req.id, { copilotProjectId: pId }));
8488
} else {
85-
res.json(util.wrapErrorResponse(req.id, 404, `Cannot find direct project ${projectId}`));
89+
res.json(util.wrapErrorResponse(req.id, 404, `Cannot find direct project ${pId}`));
8690
}
8791
})
8892
.delete((req, res) => {
89-
const projectId = req.params.projectId;
90-
app.logger.info({ body: req.body, projectId }, 'remove copilot from Project');
91-
if (projects[projectId]) {
92-
projects[projectId] = _.omit(projects[projectId], 'copilotUserId');
93+
const pId = req.params.projectId;
94+
app.logger.info({ body: req.body, pId }, 'remove copilot from Project');
95+
if (projects[pId]) {
96+
projects[pId] = _.omit(projects[pId], 'copilotUserId');
9397
res.json(util.wrapResponse(req.id, true));
9498
} else {
95-
res.json(util.wrapErrorResponse(req.id, 404, `Cannot find direct project ${projectId}`));
99+
res.json(util.wrapErrorResponse(req.id, 404, `Cannot find direct project ${pId}`));
96100
}
97101
});
98102

99103
router.route('/v3/direct/projects/:projectId(\\d+)/permissions')
100104
.post((req, res) => {
101-
const projectId = req.params.projectId;
102-
app.logger.info({ body: req.body, projectId }, 'add permissions to Project');
103-
if (projects[projectId]) {
105+
const pId = req.params.projectId;
106+
app.logger.info({ body: req.body, pId }, 'add permissions to Project');
107+
if (projects[pId]) {
104108
res.json();
105109
} else {
106-
res.json(util.wrapErrorResponse(req.id, 404, `Cannot find direct project ${projectId}`));
110+
res.json(util.wrapErrorResponse(req.id, 404, `Cannot find direct project ${pId}`));
107111
}
108112
});
109113

src/models/project.js

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
1+
/* eslint-disable valid-jsdoc */
12

2-
import { PROJECT_TYPE, PROJECT_STATUS, PROJECT_MEMBER_ROLE } from '../constants';
33
import _ from 'lodash';
4+
import { PROJECT_TYPE, PROJECT_STATUS, PROJECT_MEMBER_ROLE } from '../constants';
45

5-
module.exports = function (sequelize, DataTypes) {
6-
var Project = sequelize.define('Project', {
6+
module.exports = function defineProject(sequelize, DataTypes) {
7+
const Project = sequelize.define('Project', {
78
id: { type: DataTypes.BIGINT, primaryKey: true, autoIncrement: true },
89
directProjectId: DataTypes.BIGINT,
910
billingAccountId: DataTypes.BIGINT,
@@ -65,15 +66,17 @@ module.exports = function (sequelize, DataTypes) {
6566
return this.findAll({
6667
where: {
6768
$or: [
68-
['EXISTS(SELECT * FROM "project_members" WHERE "deletedAt" IS NULL AND "projectId" = "Project".id AND "userId" = ? )', userId],
69-
['"Project".status=? AND NOT EXISTS(SELECT * FROM "project_members" WHERE "deletedAt" IS NULL AND "projectId" = "Project".id AND "role" = ? )',
69+
['EXISTS(SELECT * FROM "project_members" WHERE "deletedAt" ' +
70+
'IS NULL AND "projectId" = "Project".id AND "userId" = ? )', userId],
71+
['"Project".status=? AND NOT EXISTS(SELECT * FROM "project_members" WHERE ' +
72+
' "deletedAt" IS NULL AND "projectId" = "Project".id AND "role" = ? )',
7073
PROJECT_STATUS.REVIEWED, PROJECT_MEMBER_ROLE.COPILOT],
7174
],
7275
},
7376
attributes: ['id'],
7477
raw: true,
7578
})
76-
.then(res => _.map(res, 'id'));
79+
.then(res => _.map(res, 'id'));
7780
},
7881
/**
7982
* Get direct project id
@@ -139,10 +142,11 @@ module.exports = function (sequelize, DataTypes) {
139142
logging: (str) => { log.debug(str); },
140143
raw: true,
141144
})
142-
.then((count) => {
143-
count = count[0].count;
145+
.then((fcount) => {
146+
const count = fcount[0].count;
144147
// select project attributes
145-
return sequelize.query(`SELECT ${attributesStr} FROM projects WHERE ${query} ORDER BY ${orderStr} LIMIT ${parameters.limit} OFFSET ${parameters.offset}`,
148+
return sequelize.query(`SELECT ${attributesStr} FROM projects WHERE ${query} ORDER BY ` +
149+
` ${orderStr} LIMIT ${parameters.limit} OFFSET ${parameters.offset}`,
146150
{ type: sequelize.QueryTypes.SELECT,
147151
logging: (str) => { log.debug(str); },
148152
raw: true,

src/models/projectAttachment.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11

22

3-
module.exports = function (sequelize, DataTypes) {
3+
module.exports = function defineProjectAttachment(sequelize, DataTypes) {
44
const ProjectAttachment = sequelize.define('ProjectAttachment', {
55
id: { type: DataTypes.BIGINT, primaryKey: true, autoIncrement: true },
66
title: { type: DataTypes.STRING, allowNull: true },

src/models/projectHistory.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11

22

3-
module.exports = function (sequelize, DataTypes) {
3+
module.exports = function defineProjectHistory(sequelize, DataTypes) {
44
const ProjectHistory = sequelize.define('ProjectHistory', {
55
id: { type: DataTypes.BIGINT, primaryKey: true, autoIncrement: true },
66
projectId: { type: DataTypes.BIGINT, allowNull: false },

src/models/projectMember.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
import _ from 'lodash';
33
import { PROJECT_MEMBER_ROLE } from '../constants';
44

5-
module.exports = function (sequelize, DataTypes) {
5+
module.exports = function defineProjectMember(sequelize, DataTypes) {
66
const ProjectMember = sequelize.define('ProjectMember', {
77
id: { type: DataTypes.BIGINT, primaryKey: true, autoIncrement: true },
88
userId: DataTypes.BIGINT,

src/permissions/index.js

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,23 @@
11

22

33
const Authorizer = require('tc-core-library-js').Authorizer;
4+
const projectView = require('./project.view');
5+
const projectEdit = require('./project.edit');
6+
const projectDelete = require('./project.delete');
7+
const projectMemberDelete = require('./projectMember.delete');
48

59
module.exports = () => {
610
Authorizer.setDeniedStatusCode(403);
711

812
// anyone can create a project
913
Authorizer.setPolicy('project.create', true);
10-
Authorizer.setPolicy('project.view', require('./project.view'));
11-
Authorizer.setPolicy('project.edit', require('./project.edit'));
12-
Authorizer.setPolicy('project.delete', require('./project.delete'));
13-
Authorizer.setPolicy('project.addMember', require('./project.view'));
14-
Authorizer.setPolicy('project.removeMember', require('./projectMember.delete'));
15-
Authorizer.setPolicy('project.addAttachment', require('./project.edit'));
16-
Authorizer.setPolicy('project.updateAttachment', require('./project.edit'));
17-
Authorizer.setPolicy('project.removeAttachment', require('./project.edit'));
18-
Authorizer.setPolicy('project.updateMember', require('./project.edit'));
14+
Authorizer.setPolicy('project.view', projectView);
15+
Authorizer.setPolicy('project.edit', projectEdit);
16+
Authorizer.setPolicy('project.delete', projectDelete);
17+
Authorizer.setPolicy('project.addMember', projectView);
18+
Authorizer.setPolicy('project.removeMember', projectMemberDelete);
19+
Authorizer.setPolicy('project.addAttachment', projectEdit);
20+
Authorizer.setPolicy('project.updateAttachment', projectEdit);
21+
Authorizer.setPolicy('project.removeAttachment', projectEdit);
22+
Authorizer.setPolicy('project.updateMember', projectEdit);
1923
};

src/permissions/project.delete.js

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,29 @@
11

22
/* globals Promise */
33

4+
import _ from 'lodash';
45
import util from '../util';
56
import models from '../models';
67
import { USER_ROLE, PROJECT_MEMBER_ROLE } from '../constants';
7-
import _ from 'lodash';
88

99
/**
1010
* Super admin, Topcoder Managers are allowed to edit any project
1111
* Rest can add members only if they are currently part of the project team.
12+
* @param {Object} freq the express request instance
13+
* @return {Promise} Returns a promise
1214
*/
13-
module.exports = req => new Promise((resolve, reject) => {
14-
const projectId = _.parseInt(req.params.projectId);
15+
module.exports = freq => new Promise((resolve, reject) => {
16+
const projectId = _.parseInt(freq.params.projectId);
1517
return models.ProjectMember.getActiveProjectMembers(projectId)
1618
.then((members) => {
19+
const req = freq;
1720
req.context = req.context || {};
1821
req.context.currentProjectMembers = members;
1922
// check if auth user has acecss to this project
20-
const hasAccess = util.hasRole(req, USER_ROLE.TOPCODER_ADMIN)
21-
|| !_.isUndefined(_.find(members, m => m.userId === req.authUser.userId
22-
&& (
23-
m.role === PROJECT_MEMBER_ROLE.CUSTOMER && m.isPrimary
24-
|| m.role === PROJECT_MEMBER_ROLE.MANAGER)));
23+
const hasAccess = util.hasRole(req, USER_ROLE.TOPCODER_ADMIN) ||
24+
!_.isUndefined(_.find(members, m => m.userId === req.authUser.userId &&
25+
((m.role === PROJECT_MEMBER_ROLE.CUSTOMER && m.isPrimary) ||
26+
m.role === PROJECT_MEMBER_ROLE.MANAGER)));
2527

2628
if (!hasAccess) {
2729
// user is not an admin nor is a registered project member

0 commit comments

Comments
 (0)