/* * Licensed to Elasticsearch B.V. under one or more contributor * license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright * ownership. Elasticsearch B.V. licenses this file to you under * the Apache License, Version 2.0 (the "License"); you may * not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ // @ts-ignore import proxy from 'proxy' import { readFileSync } from 'fs' import { join } from 'path' import * as http from 'http' import * as https from 'https' export const ssl = { key: readFileSync(join(__dirname, '..', 'fixtures', 'https.key')), cert: readFileSync(join(__dirname, '..', 'fixtures', 'https.cert')) } type AuthenticateFn = (err: Error | null, valid: boolean) => void interface ProxyServer extends http.Server { authenticate?(req: http.IncomingMessage, fn: AuthenticateFn): void } export function createProxy (): Promise { return new Promise((resolve, reject) => { const server = proxy(http.createServer()) server.listen(0, '127.0.0.1', () => { resolve(server) }) }) } export function createSecureProxy (): Promise { return new Promise((resolve, reject) => { const server = proxy(https.createServer(ssl)) server.listen(0, '127.0.0.1', () => { resolve(server) }) }) } export function createServer (): Promise { return new Promise((resolve, reject) => { const server = http.createServer() server.listen(0, '127.0.0.1', () => { resolve(server) }) }) } export function createSecureServer (): Promise { return new Promise((resolve, reject) => { const server = https.createServer(ssl) server.listen(0, '127.0.0.1', () => { resolve(server) }) }) }