33 lines
1.1 KiB
TypeScript
33 lines
1.1 KiB
TypeScript
import * as plugins from './smartproxy.plugins';
|
|
|
|
export class SmartproxyRouter {
|
|
public reverseProxyConfigs: plugins.tsclass.network.IReverseProxyConfig[] = [];
|
|
|
|
/**
|
|
* sets a new set of reverse configs to be routed to
|
|
* @param reverseCandidatesArg
|
|
*/
|
|
public setNewProxyConfigs(reverseCandidatesArg: plugins.tsclass.network.IReverseProxyConfig[]) {
|
|
this.reverseProxyConfigs = reverseCandidatesArg;
|
|
}
|
|
|
|
/**
|
|
* routes a request
|
|
*/
|
|
public routeReq(req: plugins.http.IncomingMessage): plugins.tsclass.network.IReverseProxyConfig {
|
|
const originalHost = req.headers.host;
|
|
const correspodingReverseProxyConfig = this.reverseProxyConfigs.find(reverseConfig => {
|
|
return reverseConfig.hostName === originalHost;
|
|
});
|
|
return correspodingReverseProxyConfig;
|
|
}
|
|
|
|
public routeWs(ws: plugins.wsDefault) {
|
|
const originalHost = plugins.url.parse(ws.url).host;
|
|
const correspodingReverseProxyConfig = this.reverseProxyConfigs.find(reverseConfig => {
|
|
return reverseConfig.hostName === originalHost;
|
|
});
|
|
return correspodingReverseProxyConfig.destinationIp;
|
|
}
|
|
}
|