Skip to content
This repository was archived by the owner on Mar 13, 2025. It is now read-only.

prod release #7

Open
wants to merge 8 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
server api and hooks
  • Loading branch information
kkartunov committed May 17, 2021
commit 5d59cc9229e8af35a466fdf49c138d866aae7daf
19 changes: 19 additions & 0 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 4 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "@topcoder/micro-frontends-community-admin-app",
"scripts": {
"start": "node server.js",
"start": "node --experimental-json-modules server.js",
"dev": "webpack-dev-server --port 8505 --host 0.0.0.0",
"dev-https": "webpack-dev-server --https --port 8505 --host 0.0.0.0",
"build": "webpack --mode=${APPMODE:-production} --env.config=${APPENV:-prod}",
Expand Down Expand Up @@ -65,6 +65,7 @@
"express": "^4.17.1",
"final-form": "^4.20.1",
"immutability-helper": "^3.1.1",
"isomorphic-fetch": "^3.0.0",
"lodash": "^4.17.20",
"moment": "^2.29.1",
"moment-timezone": "^0.5.33",
Expand Down Expand Up @@ -94,5 +95,6 @@
"last 1 version",
"> 1%",
"IE 11"
]
],
"type": "module"
}
11 changes: 7 additions & 4 deletions server.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,10 @@
/**
* Community Admin backend server
*/
const express = require("express");
// const betaTesters = require("./src/api/routes/betaTesters");
import express from "express";
import bodyParser from "body-parser";
// import betaTesters from "./src/api/routes/betaTesters.js";
import recruitHooks from "./src/api/routes/recruitHooks.js";

const app = express();

Expand All @@ -23,10 +25,11 @@ app.use(
);

// plugins
// app.use(bodyParser.json());
app.use(bodyParser.json());

// API routes
// app.use("/api/testers", betaTesters);
// app.use("/api/testers", betaTesters); TODO for v2
app.use("/api/hooks/", recruitHooks);

// ping route
app.get("/", function (req, res) {
Expand Down
5 changes: 2 additions & 3 deletions src/api/routes/betaTesters.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,8 @@
*/

import express from "express";
import { getMembers } from "../services/betaTesters";

const cors = require("cors");
import { getMembers } from "../services/betaTesters.js";
import cors from "cors";

const routes = express.Router();

Expand Down
38 changes: 38 additions & 0 deletions src/api/routes/recruitHooks.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
/**
* The routes related to beta testers integration
*/

import express from "express";
import cors from "cors";
import { sendEmailDirect } from "../services/sendGrid.js";

const routes = express.Router();

// Enables CORS on those routes according config above
// ToDo configure CORS for set of our trusted domains
routes.use(cors());
routes.options("*", cors());

routes.post("/recruit", (req, res) => {
sendEmailDirect({
personalizations: [
{
to: [{ email: "[email protected]" }],
subject: "Recruit hook payload",
},
],
from: {
email: "[email protected]",
},
content: [
{
type: "text/plain",
value: JSON.stringify(req.body),
},
],
}).then((result) => {
res.send({});
});
});

export default routes;
72 changes: 72 additions & 0 deletions src/api/services/sendGrid.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
/**
* Server-side functions necessary for sending emails via Sendgrid APIs
*/
/* global process */
import fetch from "isomorphic-fetch";

/**
* Sends emails via the Sendgrid API
* https://sendgrid.com/docs/api-reference/
* @param {Object} req the request
* @param {Object} res the response
*/
export const sendEmail = async (req, res) => {
try {
const msg = req.body;
const response = await fetch("https://api.sendgrid.com/v3/mail/send", {
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: `Bearer ${process.env.SENDGRID_API_KEY}`,
},
body: JSON.stringify(msg),
});
res.status(response.status);
return {};
} catch (error) {
const { message, code, response } = error;
res.status(code || 500);
if (error.response) {
const { headers, body } = response;
return {
message,
headers,
body,
};
}
return { message };
}
};

/**
* Send email directly via the SendGrid API
* @param {Object} msg the payload
* @returns Promise
*/
export const sendEmailDirect = async (msg) => {
try {
const response = await fetch("https://api.sendgrid.com/v3/mail/send", {
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: `Bearer ${process.env.SENDGRID_API_KEY}`,
},
body: JSON.stringify(msg),
});
return response;
} catch (error) {
const { message, code, response } = error;
if (error.response) {
const { headers, body } = response;
return {
code,
message,
headers,
body,
};
}
return { message };
}
};

export default undefined;
2 changes: 1 addition & 1 deletion src/components/NoAccessPage/index.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ const NoAccessPage = () => {
<Page title="Forbidden">
<PageHeader title="Forbidden Area" />
<h4 styleName="msg">
Sorry, looks that you not autorized to access this page :(
Sorry, looks that you not authorized to access this page :(
</h4>
<p>
If you feel this is an error, contact{" "}
Expand Down