proxyPolicy.ts 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. // Copyright (c) Microsoft Corporation. All rights reserved.
  2. // Licensed under the MIT License. See License.txt in the project root for license information.
  3. import { BaseRequestPolicy, RequestPolicy, RequestPolicyFactory, RequestPolicyOptions } from "./requestPolicy";
  4. import { HttpOperationResponse } from "../httpOperationResponse";
  5. import { ProxySettings } from "../serviceClient";
  6. import { WebResource } from "../webResource";
  7. import { Constants } from "../util/constants";
  8. import { URLBuilder } from "../url";
  9. function loadEnvironmentProxyValue(): string | undefined {
  10. if (!process) {
  11. return undefined;
  12. }
  13. if (process.env[Constants.HTTPS_PROXY]) {
  14. return process.env[Constants.HTTPS_PROXY];
  15. } else if (process.env[Constants.HTTPS_PROXY.toLowerCase()]) {
  16. return process.env[Constants.HTTPS_PROXY.toLowerCase()];
  17. } else if (process.env[Constants.HTTP_PROXY]) {
  18. return process.env[Constants.HTTP_PROXY];
  19. } else if (process.env[Constants.HTTP_PROXY.toLowerCase()]) {
  20. return process.env[Constants.HTTP_PROXY.toLowerCase()];
  21. }
  22. return undefined;
  23. }
  24. export function getDefaultProxySettings(proxyUrl?: string): ProxySettings | undefined {
  25. if (!proxyUrl) {
  26. proxyUrl = loadEnvironmentProxyValue();
  27. if (!proxyUrl) {
  28. return undefined;
  29. }
  30. }
  31. const parsedUrl = URLBuilder.parse(proxyUrl);
  32. return {
  33. host: parsedUrl.getScheme() + "://" + parsedUrl.getHost(),
  34. port: Number.parseInt(parsedUrl.getPort() || "80")
  35. };
  36. }
  37. export function proxyPolicy(proxySettings?: ProxySettings): RequestPolicyFactory {
  38. return {
  39. create: (nextPolicy: RequestPolicy, options: RequestPolicyOptions) => {
  40. return new ProxyPolicy(nextPolicy, options, proxySettings!);
  41. }
  42. };
  43. }
  44. export class ProxyPolicy extends BaseRequestPolicy {
  45. proxySettings: ProxySettings;
  46. constructor(nextPolicy: RequestPolicy, options: RequestPolicyOptions, proxySettings: ProxySettings) {
  47. super(nextPolicy, options);
  48. this.proxySettings = proxySettings;
  49. }
  50. public sendRequest(request: WebResource): Promise<HttpOperationResponse> {
  51. if (!request.proxySettings) {
  52. request.proxySettings = this.proxySettings;
  53. }
  54. return this._nextPolicy.sendRequest(request);
  55. }
  56. }