Skip to content

Commit 3a42fbf

Browse files
authored
Merge pull request #7037 from topcoder-platform/pm-591
fix(PM-594, PM-596, PM-606): Regression fixes
2 parents ada2da3 + c63199c commit 3a42fbf

File tree

3 files changed

+65
-2
lines changed

3 files changed

+65
-2
lines changed

src/server/routes/feeds.js

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
/**
2+
* The routes that expose assets and content from Contentful CMS to the CDN.
3+
*/
4+
5+
import express from 'express';
6+
import RSS from 'rss';
7+
import ReactDOMServer from 'react-dom/server';
8+
import md from 'utils/markdown';
9+
import {
10+
getService,
11+
} from '../services/contentful';
12+
13+
const cors = require('cors');
14+
15+
const routes = express.Router();
16+
17+
// Enables CORS on those routes according config above
18+
// ToDo configure CORS for set of our trusted domains
19+
routes.use(cors());
20+
routes.options('*', cors());
21+
22+
routes.get('/thrive', async (req, res, next) => {
23+
try {
24+
const data = await getService('EDU', 'master', true).queryEntries({
25+
content_type: 'article',
26+
limit: 20,
27+
order: '-sys.createdAt',
28+
include: 2,
29+
'sys.firstPublishedAt[exists]': true,
30+
});
31+
const feed = new RSS({
32+
title: 'Topcoder Thrive',
33+
description: 'Tutorials And Workshops That Matter | Thrive | Topcoder',
34+
feed_url: 'https://topcoder.com/api/feeds/thrive',
35+
site_url: 'https://topcoder.com/thrive',
36+
image_url: 'https://www.topcoder.com/wp-content/uploads/2020/05/cropped-TC-Icon-32x32.png',
37+
docs: 'https://www.topcoder.com/thrive/tracks?track=Topcoder',
38+
webMaster: '<[email protected]> Kiril Kartunov',
39+
copyright: '2021 - today, Topcoder',
40+
language: 'en',
41+
categories: ['Competitive Programming', 'Data Science', 'Design', 'Development', 'QA', 'Gig work', 'Topcoder'],
42+
ttl: '60',
43+
});
44+
if (data && data.total) {
45+
data.items.forEach((entry) => {
46+
feed.item({
47+
title: entry.fields.title,
48+
description: ReactDOMServer.renderToString(md(entry.fields.content)),
49+
url: `https://topcoder.com/thrive/articles/${entry.fields.slug || encodeURIComponent(entry.fields.title)}?utm_source=thrive&utm_campaign=thrive-feed&utm_medium=rss-feed`,
50+
date: entry.sys.createdAt,
51+
categories: entry.fields.tags,
52+
author: entry.fields.contentAuthor[0].fields.name,
53+
});
54+
});
55+
}
56+
res.set('Content-Type', 'application/rss+xml');
57+
res.send(feed.xml({ indent: true }));
58+
} catch (e) {
59+
next(e);
60+
}
61+
});
62+
63+
export default routes;

src/server/services/recruitCRM.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,7 @@ export default class RecruitCRMService {
189189
try {
190190
const sanitizedId = xss(req.params.id);
191191

192-
if (!/^[a-zA-Z0-9-_]{8,20}$/.test(sanitizedId)) {
192+
if (!/^[a-zA-Z0-9-_]{8,23}$/.test(sanitizedId)) {
193193
return res.status(400).json({ error: 'Invalid job ID format.' });
194194
}
195195
const response = await fetch(`${this.private.baseUrl}/v1/jobs/${sanitizedId}`, {

src/shared/utils/markdown.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ const customComponents = {
129129
};
130130

131131
const unsafeHtmlTags = [
132-
'script', 'style', 'iframe', 'object', 'embed', 'applet', 'base',
132+
'script', 'iframe', 'object', 'embed', 'applet', 'base',
133133
'form', 'meta', 'frame', 'frameset', 'marquee', 'svg',
134134
];
135135

0 commit comments

Comments
 (0)