40 lines
1.0 KiB
TypeScript
40 lines
1.0 KiB
TypeScript
import { FastifyInstance } from "fastify";
|
|
import { $mail, ProxyRequest } from "./mailProxy.schema";
|
|
import { getOutlookTokens } from "./mailProxy.service";
|
|
import axios from "axios";
|
|
|
|
export async function mailProxyRoutes(fastify: FastifyInstance) {
|
|
fastify.post(
|
|
"/",
|
|
{
|
|
schema: {
|
|
body: $mail("proxyRequest"),
|
|
},
|
|
config: { requiredClaims: ["mail:all"] },
|
|
preHandler: [fastify.authorize],
|
|
},
|
|
async (req, res) => {
|
|
const input = req.body as ProxyRequest;
|
|
|
|
try {
|
|
const tokens = await getOutlookTokens(input.email);
|
|
if (!tokens) return res.code(404).send({ error: "resource not found" });
|
|
|
|
const result = await axios({
|
|
url: input.url,
|
|
method: input.method,
|
|
headers: {
|
|
Authorization: "Bearer " + tokens.access_token,
|
|
},
|
|
data: input.body,
|
|
validateStatus: () => true,
|
|
});
|
|
|
|
return res.code(result.status).send(result.data);
|
|
} catch (err) {
|
|
return err;
|
|
}
|
|
}
|
|
);
|
|
}
|