mirror of
https://github.com/gristlabs/grist-core.git
synced 2024-10-27 20:44:07 +00:00
440d5b935a
Summary: - Webhooks form Triggers.ts should now use proxy if it's configured - Proxy handling code separated to ProxyAgent.ts - Tests for ProxyAgent - Integration/API Tests for using Proxy in webhooks - a bit of refactor - proxy test uses mostly the same codebase as DocApi.ts, but because last one if over 4000 lines long, I've put it into separated file, and extract some common parts (there is some duplicates tho) - some cleanup in files that I've touched Test Plan: Manual test to check if proxy is used on the staging env Automatic test checking if (fake) proxy was called Reviewers: paulfitz Reviewed By: paulfitz Subscribers: paulfitz Differential Revision: https://phab.getgrist.com/D3860
47 lines
1.2 KiB
TypeScript
47 lines
1.2 KiB
TypeScript
import {serveSomething, Serving} from "test/server/customUtil";
|
|
import * as bodyParser from "body-parser";
|
|
import {Request, Response} from "express-serve-static-core";
|
|
import axios from "axios";
|
|
|
|
export class TestProxyServer {
|
|
public static async Prepare(portNumber: number): Promise<TestProxyServer> {
|
|
const server = new TestProxyServer();
|
|
await server._prepare(portNumber);
|
|
return server;
|
|
|
|
}
|
|
|
|
private _proxyCallsCounter: number = 0;
|
|
private _proxyServing: Serving;
|
|
|
|
private constructor() {
|
|
}
|
|
|
|
public wasProxyCalled(): boolean {
|
|
return this._proxyCallsCounter > 0;
|
|
}
|
|
|
|
public async dispose() {
|
|
await this._proxyServing.shutdown();
|
|
}
|
|
|
|
private async _prepare(portNumber: number) {
|
|
this._proxyServing = await serveSomething(app => {
|
|
app.use(bodyParser.json());
|
|
app.all('*', async (req: Request, res: Response) => {
|
|
this._proxyCallsCounter += 1;
|
|
let responseCode;
|
|
try {
|
|
const axiosResponse = await axios.post(req.url, req.body);
|
|
responseCode = axiosResponse.status;
|
|
} catch (error: any) {
|
|
responseCode = error.response.status;
|
|
}
|
|
res.sendStatus(responseCode);
|
|
res.end();
|
|
//next();
|
|
});
|
|
}, portNumber);
|
|
}
|
|
}
|