|
6 | 6 | }); |
7 | 7 | var tokenValidation = Joi.string().required().min(1).example('1234567890');//TODO: Revisit this validation to see if we can better validate the values |
8 | 8 | var commitIdValidation = Joi.string().required().min(1).example('1234567890'); //TODO: Revisit this validation to see if we can better validate the values |
| 9 | + var accountTokenValidation = Joi.string().required().min(1).example('1234567890'); |
| 10 | + var usernameValidation = Joi.string().required().min(1).example('1234567890'); |
| 11 | + var projectNameValidation = Joi.string().required().min(1).example('1234567890'); |
9 | 12 | var coverageDataValidation = Joi.object({ |
10 | 13 | total: Joi.number().integer().required().min(0).max(100), |
11 | 14 | fileReports: Joi.array().required().items(Joi.object({ |
|
23 | 26 | coffee: 'coffeescript' |
24 | 27 | }; |
25 | 28 |
|
26 | | - function sendByLanguage(endpoint, commitId, token, data) { |
| 29 | + function sendByLanguage(endpoint, commitId, token, data, accountToken, username, projectName) { |
27 | 30 | var reportsByLanguage = lodash.groupBy(data.fileReports, function(elem) { |
28 | 31 | return languageMap[lodash.head(lodash.takeRight(elem.filename.split('.'), 1))] || 'javascript'; |
29 | 32 | }); |
|
44 | 47 | dataPerLanguage.fileReports = fileReports; |
45 | 48 | dataPerLanguage.total = Math.floor(finalCoverage); |
46 | 49 |
|
47 | | - return sendLanguage(endpoint, commitId, language, token, dataPerLanguage); |
| 50 | + return sendLanguage(endpoint, commitId, language, token, dataPerLanguage, accountToken, username, projectName); |
48 | 51 | }); |
49 | 52 |
|
50 | 53 | return Promise.all(languageResponses) |
|
65 | 68 | }); |
66 | 69 | } |
67 | 70 |
|
68 | | - function sendForLanguage(endpoint, commitId, language, token, data) { |
69 | | - return sendLanguage(endpoint, commitId, language, token, data) |
| 71 | + |
| 72 | + function sendForLanguage(endpoint, commitId, language, token, data, accountToken, username, projectName) { |
| 73 | + return sendLanguage(endpoint, commitId, language, token, data, accountToken, username, projectName) |
70 | 74 | .then(function(err) { |
71 | 75 | if (err) { |
72 | 76 | return Promise.reject(err); |
|
77 | 81 | }); |
78 | 82 | } |
79 | 83 |
|
80 | | - function sendLanguage(endpoint, commitId, language, token, data) { |
| 84 | + function sendLanguage(endpoint, commitId, language, token, data, accountToken, username, projectName) { |
81 | 85 | var url = endpoint.replace(':commitId', commitId).replace(':language', language); |
| 86 | + // jscs:disable |
| 87 | + var headers = accountToken ? {api_token: accountToken} : {project_token: token}; |
| 88 | + // jscs:enable |
| 89 | + if (accountToken) { |
| 90 | + url = url.replace(':username', username).replace(':projectName', projectName); |
| 91 | + } |
| 92 | + |
82 | 93 | logger.trace(util.format('Sending POST to %s', url)); |
83 | 94 | return request({ |
84 | 95 | url: url, |
85 | 96 | method: 'POST', |
86 | 97 | json: data, |
87 | | - headers: { |
88 | | - // jscs:disable |
89 | | - project_token: token |
90 | | - // jscs:enable |
91 | | - }, |
| 98 | + headers: headers, |
92 | 99 | resolveWithFullResponse: true |
93 | 100 | }).then(function(res) { |
94 | 101 | if (res.statusCode !== 200) { |
|
116 | 123 | throw optionsValid.error; |
117 | 124 | } |
118 | 125 |
|
119 | | - var endpoint = (options.endpoint || 'https://api.codacy.com') + '/2.0/coverage/:commitId/:language'; |
| 126 | + var endpointPostfix = options.accountToken ? '/2.0/:username/:projectName/commit/:commitId/coverage/:language' : '/2.0/coverage/:commitId/:language'; |
| 127 | + |
| 128 | + var endpoint = (options.endpoint || 'https://api.codacy.com') + endpointPostfix; |
| 129 | + |
120 | 130 | logger.debug('Setting up reporter communicating to: ' + endpoint); |
121 | 131 |
|
122 | 132 | return { |
123 | | - sendCoverage: function sendCoverage(token, commitId, language, data) { |
| 133 | + sendCoverage: function sendCoverage(token, commitId, language, data, accountToken, username, projectName) { |
124 | 134 | logger.trace(util.format('Sending Coverage for token [%s] and commitId [%s]', token, commitId)); |
125 | 135 | var tokenValid = Joi.validate(token, tokenValidation); |
126 | 136 | var commitIdValid = Joi.validate(commitId, commitIdValidation); |
127 | 137 | var dataValid = Joi.validate(data, coverageDataValidation, { |
128 | 138 | stripUnknown: true |
129 | 139 | }); |
130 | | - var validationErr = tokenValid.error || commitIdValid.error || dataValid.error; |
| 140 | + var validationErr = commitIdValid.error || dataValid.error; |
| 141 | + |
| 142 | + if (accountToken) { |
| 143 | + var accountTokenValid = Joi.validate(accountToken, accountTokenValidation); |
| 144 | + var usernameValid = Joi.validate(username, usernameValidation); |
| 145 | + var projectNameValid = Joi.validate(projectName, projectNameValidation); |
| 146 | + |
| 147 | + validationErr = validationErr || accountTokenValid.error || usernameValid.error || projectNameValid.error; |
| 148 | + } else { |
| 149 | + validationErr = validationErr || tokenValid.error; |
| 150 | + } |
131 | 151 |
|
132 | 152 | if (validationErr) { |
133 | 153 | logger.error(validationErr); |
134 | 154 | return Promise.reject(validationErr); |
135 | 155 | } |
136 | 156 |
|
137 | 157 | if (language) { |
138 | | - return sendForLanguage(endpoint, commitId, language, token, data); |
| 158 | + return sendForLanguage(endpoint, commitId, language, token, data, accountToken, username, projectName); |
139 | 159 | } |
140 | 160 |
|
141 | | - return sendByLanguage(endpoint, commitId, token, data); |
| 161 | + return sendByLanguage(endpoint, commitId, token, data, accountToken, username, projectName); |
142 | 162 | } |
143 | 163 | }; |
144 | 164 | }; |
|
0 commit comments