Skip to content

Commit 4e3281b

Browse files
Merge pull request #6319 from topcoder-platform/develop
Release v1.15.11
2 parents de32d33 + d93f225 commit 4e3281b

File tree

4 files changed

+109
-6
lines changed

4 files changed

+109
-6
lines changed

.circleci/config.yml

+2-5
Original file line numberDiff line numberDiff line change
@@ -343,14 +343,13 @@ workflows:
343343
branches:
344344
only:
345345
- develop
346-
- fix/infected-submission
347346
# This is alternate dev env for parallel testing
348347
- "build-test":
349348
context : org-global
350349
filters:
351350
branches:
352351
only:
353-
- ca-profile-bug-bash
352+
- csp-headers
354353
# This is alternate dev env for parallel testing
355354
- "build-qa":
356355
context : org-global
@@ -364,16 +363,14 @@ workflows:
364363
filters:
365364
branches:
366365
only:
367-
- new-tc-logo
366+
- csp-headers
368367
# This is stage env for production QA releases
369368
- "build-prod-staging":
370369
context : org-global
371370
filters: &filters-staging
372371
branches:
373372
only:
374373
- develop
375-
- features/mm-dashboard
376-
- fix/settings-save-fail
377374
# Production builds are exectuted
378375
# when PR is merged to the master
379376
# Don't change anything in this configuration

src/server/index.js

+80
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,86 @@ async function onExpressJsSetup(server) {
131131
return next();
132132
};
133133

134+
server.use((req, res, next) => {
135+
res.header('Referrer-Policy', 'strict-origin-when-cross-origin');
136+
res.header('Permissions-Policy', 'geolocation=(), microphone=(), camera=()');
137+
138+
if (req.url.startsWith('/__community__/veterans') || req.hostname === 'veterans.topcoder.com') {
139+
res.header(
140+
'Content-Security-Policy',
141+
"default-src 'self';"
142+
+ " script-src 'report-sample' 'self' 'unsafe-inline' 'unsafe-eval'"
143+
+ ` ${config.CDN.PUBLIC}`
144+
+ ' http://www.google-analytics.com'
145+
+ ' https://43d132d5dbff47c59d9d53ad448f93c2.js.ubembed.com'
146+
+ ' https://assets.ubembed.com'
147+
+ ' https://assets.zendesk.com'
148+
+ ' https://browser.sentry-cdn.com'
149+
+ ' https://cdn.heapanalytics.com'
150+
+ ' https://cdn.segment.com'
151+
+ ' https://connect.facebook.net'
152+
+ ' https://d1of0acg2orgco.cloudfront.net'
153+
+ ' https://d1mwkvp2xbqfs9.cloudfront.net'
154+
+ ' https://d24oibycet9bsb.cloudfront.net'
155+
+ ' https://fast.trychameleon.com'
156+
+ ' https://static.zdassets.com'
157+
+ ' https://www.googletagmanager.com;'
158+
+ " style-src 'report-sample' 'self' 'unsafe-inline'"
159+
+ ` ${config.CDN.PUBLIC}`
160+
+ ' https://d1of0acg2orgco.cloudfront.net'
161+
+ ' https://d1mwkvp2xbqfs9.cloudfront.net'
162+
+ ' https://d24oibycet9bsb.cloudfront.net'
163+
+ ' https://d2nl5eqipnb33q.cloudfront.net;'
164+
+ " object-src 'none';"
165+
+ " base-uri 'self';"
166+
+ " connect-src 'self'"
167+
+ ` ${config.API.V2}/`
168+
+ ` ${config.API.V3}/`
169+
+ ` ${config.API.V4}/`
170+
+ ` ${config.API.V5}/`
171+
+ ` ${config.CDN.PUBLIC}`
172+
+ ` ${config.URL.COMMUNITY_APP}`
173+
+ ' https://api.segment.io'
174+
+ ' https://cdn.segment.com'
175+
+ ' https://ekr.zdassets.com'
176+
+ ' https://fast.trychameleon.com'
177+
+ ' https://topcoder.zendesk.com'
178+
+ ' https://stats.g.doubleclick.net'
179+
+ ' https://www.google-analytics.com;'
180+
+ " font-src 'self'"
181+
+ ' data:'
182+
+ ` ${config.CDN.PUBLIC}`
183+
+ ' https://d1of0acg2orgco.cloudfront.net'
184+
+ ' https://d24oibycet9bsb.cloudfront.net'
185+
+ ' https://43d132d5dbff47c59d9d53ad448f93c2.js.ubembed.com;'
186+
+ " frame-src 'self'"
187+
+ ` ${config.URL.AUTH}`
188+
+ ' https://www.youtube.com;'
189+
+ " img-src 'self'"
190+
+ ` ${config.CDN.PUBLIC}`
191+
+ ' https://cdn.segment.com'
192+
+ ' https://d1of0acg2orgco.cloudfront.net'
193+
+ ' https://d24oibycet9bsb.cloudfront.net'
194+
+ ' https://d2nl5eqipnb33q.cloudfront.net'
195+
+ ' https://images.ctfassets.net'
196+
+ ' https://heapanalytics.com'
197+
+ ' https://q.quora.com'
198+
+ ' https://topcoder-prod-media.s3.amazonaws.com'
199+
+ ' https://www.facebook.com'
200+
+ ' https://www.google-analytics.com'
201+
+ ' https://www.google.com'
202+
+ ' https://www.googletagmanager.com'
203+
+ ' https://i.ytimg.com;'
204+
+ " manifest-src 'self';"
205+
+ " media-src 'self';"
206+
+ ' report-uri https://623d4c23f90d055298b24042.endpoint.csper.io/?v=0;'
207+
+ " worker-src 'self';",
208+
);
209+
}
210+
211+
next();
212+
});
213+
134214
/* Log Entries service proxy. */
135215
server.use('/community-app-assets/api/logger', checkAuthorizationHeader, (req, res) => {
136216
logger.log(`${req.clientIp} > `, ...req.body.data);

src/server/services/recruitCRM.js

+26
Original file line numberDiff line numberDiff line change
@@ -209,6 +209,16 @@ export default class RecruitCRMService {
209209
return res.send(error);
210210
}
211211
const data = await response.json();
212+
213+
// If job or form not open return just job status
214+
if ((data.job_status && data.job_status.id !== 1)
215+
|| data.enable_job_application_form !== 1) {
216+
return res.send({
217+
job_status: data.job_status,
218+
enable_job_application_form: data.enable_job_application_form,
219+
});
220+
}
221+
212222
return res.send(sanitizeJob(data));
213223
} catch (err) {
214224
return next(err);
@@ -261,10 +271,18 @@ export default class RecruitCRMService {
261271
const pageData = await pageDataRsp.json();
262272
data.data = _.flatten(data.data.concat(pageData.data));
263273
}
274+
275+
// Filter by Job Application active
276+
data.data = _.filter(data.data, job => job.enable_job_application_form === 1);
277+
264278
const toSend = _.map(data.data, j => sanitizeJob(j));
265279
return toSend;
266280
});
267281
}
282+
283+
// Filter by Job Application active
284+
data.data = _.filter(data.data, job => job.enable_job_application_form === 1);
285+
268286
const toSend = _.map(data.data, j => sanitizeJob(j));
269287
return toSend;
270288
} catch (err) {
@@ -322,6 +340,10 @@ export default class RecruitCRMService {
322340
const pageData = await pageDataRsp.json();
323341
data.data = _.flatten(data.data.concat(pageData.data));
324342
}
343+
344+
// Filter by Job Application active
345+
data.data = _.filter(data.data, job => job.enable_job_application_form === 1);
346+
325347
const toSend = _.map(data.data, j => sanitizeJob(j));
326348
gigsCache.set(CACHE_KEY, toSend);
327349
return res.send(toSend);
@@ -330,6 +352,10 @@ export default class RecruitCRMService {
330352
error: e,
331353
}));
332354
}
355+
356+
// Filter by Job Application active
357+
data.data = _.filter(data.data, job => job.enable_job_application_form === 1);
358+
333359
const toSend = _.map(data.data, j => sanitizeJob(j));
334360
gigsCache.set(CACHE_KEY, toSend);
335361
return res.send(toSend);

src/shared/reducers/recruitCRM.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ function onDone(state, { payload }) {
2626
return {
2727
...state,
2828
loading: false,
29-
jobs: _.filter(payload.data, job => job.enable_job_application_form === 1),
29+
jobs: payload.data,
3030
};
3131
}
3232

0 commit comments

Comments
 (0)