File tree 3 files changed +55
-0
lines changed
3 files changed +55
-0
lines changed Original file line number Diff line number Diff line change @@ -29,6 +29,7 @@ import mockDocuSignFactory from './__mocks__/docu-sign-mock';
29
29
import recruitCRMRouter from './routes/recruitCRM' ;
30
30
import mmLeaderboardRouter from './routes/mmLeaderboard' ;
31
31
import feedsRouter from './routes/feeds' ;
32
+ import blogRouter from './routes/blog' ;
32
33
33
34
/* Dome API for topcoder communities */
34
35
import tcCommunitiesDemoApi from './tc-communities' ;
@@ -163,6 +164,7 @@ async function onExpressJsSetup(server) {
163
164
164
165
const checkAuthorizationHeader = ( req , res , next ) => {
165
166
if ( req . headers . authorization !== `ApiKey ${ config . SERVER_API_KEY } ` ) {
167
+ console . log ( 'checkAuthorizationHeader failed' ) ;
166
168
return res . status ( 403 ) . end ( ) ;
167
169
}
168
170
return next ( ) ;
@@ -277,6 +279,7 @@ async function onExpressJsSetup(server) {
277
279
server . use ( '/api/recruit' , recruitCRMRouter ) ;
278
280
server . use ( '/api/mml' , mmLeaderboardRouter ) ;
279
281
server . use ( '/api/feeds' , feedsRouter ) ;
282
+ server . use ( '/api/blog' , blogRouter ) ;
280
283
281
284
// serve demo api
282
285
server . use (
Original file line number Diff line number Diff line change
1
+ import express from 'express' ;
2
+
3
+ import getBlogs from '../services/blog' ;
4
+
5
+ const router = express . Router ( ) ;
6
+
7
+ router . use ( ( req , res , next ) => {
8
+ res . set ( 'Access-Control-Allow-Origin' , '*' ) ;
9
+ next ( ) ;
10
+ } ) ;
11
+
12
+ router . get ( '/' , async ( req , res , next ) => {
13
+ try {
14
+ const limit = Number ( req . query . limit ) ;
15
+ const { category } = req . query ;
16
+ res . send ( await getBlogs ( limit , category ) ) ;
17
+ } catch ( err ) { next ( err ) ; }
18
+ } ) ;
19
+
20
+ export default router ;
Original file line number Diff line number Diff line change
1
+ /**
2
+ * Service that fetches blog rss and parses it
3
+ */
4
+ import RSSParser from 'rss-parser' ;
5
+ import { config } from 'topcoder-react-utils' ;
6
+ import { logger } from 'topcoder-react-lib' ;
7
+ import _ from 'lodash' ;
8
+
9
+ /**
10
+ * Gets blogs and returns as a list
11
+ * @param {number } limit The number of blogs to return
12
+ * @param {string } category blog category to fetch
13
+ * @return {Promise } Resulting blogs.
14
+ */
15
+ export default async function getBlogs ( limit , category = null ) {
16
+ try {
17
+ const feed = await fetch ( config . URL . BLOG_FEED ) ;
18
+ const rss = await feed . text ( ) ;
19
+ const feedBlogs = new RSSParser ( ) . parseString ( rss . replace ( '<![CDATA[]]>' , '' ) ) ;
20
+ const blogs = await feedBlogs ;
21
+ const filteredBlogs = category
22
+ ? blogs . items . filter (
23
+ blog => _ . get ( blog , 'categories' , [ ] ) . map ( c => c . trim ( ) ) . includes ( category ) ,
24
+ ) : blogs . items ;
25
+ return filteredBlogs
26
+ . sort ( ( a , b ) => new Date ( b . pubDate ) - new Date ( a . pubDate ) )
27
+ . slice ( 0 , limit ) ;
28
+ } catch ( e ) {
29
+ logger . error ( 'getBlogs error' , e ) ;
30
+ return [ ] ;
31
+ }
32
+ }
You can’t perform that action at this time.
0 commit comments