server
This commit is contained in:
@@ -0,0 +1,18 @@
|
||||
const refreshToken =
|
||||
"1000.da3146d49fa8a399f0c635e74954ff9c.e010dbb1bb605d7e1aa5bf7fc0521f8b";
|
||||
const clientId = "1000.6ZV07WFOC7PQOY3X109UN55Q9BMBBY";
|
||||
const clientSecret = "595f5262886a6e81475b533350a81e46fecda57fb5";
|
||||
const grantType = "refresh_token";
|
||||
|
||||
const updateAccessTokenApi = `https://accounts.zoho.com/oauth/v2/token`;
|
||||
const aparmentsApi =
|
||||
"https://www.zohoapis.com/crm/v2/Apartments?fields=Floor,Property_Status,Project_Name,Balcony_Area_Sqft,Unit_Type,Suite_Area_Sqft,No_Of_Bedrooms,Total_Area_Sqft,No_of_Bathrooms,Property_Name,Unit_View,Balcony_Area_Sqft,Unit_No,Suite_Area_Sqft";
|
||||
|
||||
export {
|
||||
aparmentsApi,
|
||||
updateAccessTokenApi,
|
||||
refreshToken,
|
||||
clientId,
|
||||
clientSecret,
|
||||
grantType,
|
||||
};
|
||||
@@ -0,0 +1,30 @@
|
||||
import "dotenv/config";
|
||||
import express, { json } from "express";
|
||||
import cors from "cors";
|
||||
import fs from "fs";
|
||||
import path from "path";
|
||||
import { fileURLToPath } from "url";
|
||||
import morgan from "morgan";
|
||||
import apartmentsRoute from "./routes/aparments.js";
|
||||
import accessTokenMiddleware from "./middlewares/accessTokenMiddleware.js";
|
||||
|
||||
const __filename = fileURLToPath(import.meta.url);
|
||||
const __dirname = path.dirname(__filename);
|
||||
|
||||
const app = express();
|
||||
const port = process.env.PORT || 3000;
|
||||
|
||||
const accessLogStream = fs.createWriteStream(
|
||||
path.join(__dirname, "../logs/access.log"),
|
||||
{ flags: "a" }
|
||||
);
|
||||
|
||||
app.use(cors());
|
||||
app.use(json());
|
||||
app.use(morgan("combined", { stream: accessLogStream }));
|
||||
|
||||
app.use("/aparments", accessTokenMiddleware, apartmentsRoute);
|
||||
|
||||
app.listen(port, () => {
|
||||
console.log(`Server is listening on port ${port}`);
|
||||
});
|
||||
@@ -0,0 +1,47 @@
|
||||
import { Request, Response, NextFunction } from "express";
|
||||
import { aparmentsApi } from "../consts.js";
|
||||
import { logger } from "../utils/logger.js";
|
||||
|
||||
var checkAccessToken = async function (
|
||||
req: Request,
|
||||
res: Response,
|
||||
next: NextFunction
|
||||
) {
|
||||
const accessToken = req.headers.authorization;
|
||||
|
||||
if (!accessToken)
|
||||
return res.status(401).json({ error: "Not found access token" });
|
||||
|
||||
try {
|
||||
const respose = await fetch(aparmentsApi, {
|
||||
headers: {
|
||||
Authorization: accessToken,
|
||||
},
|
||||
});
|
||||
|
||||
if (respose.status === 401) {
|
||||
try {
|
||||
const response2 = await fetch(
|
||||
`https://accounts.zoho.com/oauth/v2/token?refresh_token=1000.da3146d49fa8a399f0c635e74954ff9c.e010dbb1bb605d7e1aa5bf7fc0521f8b&client_id=1000.6ZV07WFOC7PQOY3X109UN55Q9BMBBY&client_secret=595f5262886a6e81475b533350a81e46fecda57fb5&grant_type=refresh_token`,
|
||||
{
|
||||
method: "post",
|
||||
}
|
||||
);
|
||||
const { access_token } = await response2.json();
|
||||
return res.json({ accessToken: access_token });
|
||||
} catch (error) {
|
||||
console.log("error", (error as Error).message);
|
||||
logger.error(error);
|
||||
return res.json({ error: (error as Error).message });
|
||||
}
|
||||
}
|
||||
|
||||
next();
|
||||
} catch (error) {
|
||||
console.log("error", (error as Error).message);
|
||||
logger.error(error);
|
||||
return res.json({ error: (error as Error).message });
|
||||
}
|
||||
};
|
||||
|
||||
export default checkAccessToken;
|
||||
@@ -0,0 +1,26 @@
|
||||
import { Router } from "express";
|
||||
import { aparmentsApi } from "../consts.js";
|
||||
|
||||
const router = Router();
|
||||
|
||||
router.get("/", async (req, res) => {
|
||||
const accessToken = req.headers.authorization;
|
||||
|
||||
if (!accessToken) return;
|
||||
|
||||
console.log("accessToken", `[${accessToken}]`);
|
||||
|
||||
const apartments = await fetch(aparmentsApi, {
|
||||
headers: {
|
||||
Authorization: accessToken,
|
||||
},
|
||||
});
|
||||
|
||||
const result = await apartments.json();
|
||||
|
||||
res.json({ ok: 1, apartments: result });
|
||||
});
|
||||
|
||||
const apartmentsRoute = router;
|
||||
|
||||
export default apartmentsRoute;
|
||||
@@ -0,0 +1,27 @@
|
||||
import * as winston from "winston";
|
||||
|
||||
const { combine, timestamp, json } = winston.format;
|
||||
|
||||
export const logger = winston.createLogger({
|
||||
level: "info",
|
||||
format: combine(
|
||||
timestamp({
|
||||
format: "YYYY-MM-DD hh:mm:ss.SSS A",
|
||||
}),
|
||||
json()
|
||||
),
|
||||
transports: [
|
||||
//
|
||||
// - Write to all logs with level `debug` and below to `all.log`
|
||||
// - Write all logs error (and below) to `error.log`.
|
||||
//
|
||||
new winston.transports.File({
|
||||
filename: "logs/error.log",
|
||||
level: "error",
|
||||
}),
|
||||
new winston.transports.File({
|
||||
filename: "logs/all.log",
|
||||
level: "debug",
|
||||
}),
|
||||
],
|
||||
});
|
||||
Reference in New Issue
Block a user