зеркало из https://github.com/Azure/ms-rest-js.git
Remove cookie support.
This commit is contained in:
Родитель
3b57cdf3f4
Коммит
2dcf244dab
|
@ -1,7 +1,6 @@
|
||||||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||||
// Licensed under the MIT License. See License.txt in the project root for license information.
|
// Licensed under the MIT License. See License.txt in the project root for license information.
|
||||||
|
|
||||||
import * as tough from "tough-cookie";
|
|
||||||
import * as http from "http";
|
import * as http from "http";
|
||||||
import * as https from "https";
|
import * as https from "https";
|
||||||
import node_fetch from "node-fetch";
|
import node_fetch from "node-fetch";
|
||||||
|
@ -17,8 +16,6 @@ import { WebResourceLike } from "./webResource";
|
||||||
import { createProxyAgent, ProxyAgent } from "./proxyAgent";
|
import { createProxyAgent, ProxyAgent } from "./proxyAgent";
|
||||||
|
|
||||||
export class NodeFetchHttpClient extends FetchHttpClient {
|
export class NodeFetchHttpClient extends FetchHttpClient {
|
||||||
private readonly cookieJar = new tough.CookieJar(undefined, { looseMode: true });
|
|
||||||
|
|
||||||
async fetch(input: CommonRequestInfo, init?: CommonRequestInit): Promise<CommonResponse> {
|
async fetch(input: CommonRequestInfo, init?: CommonRequestInit): Promise<CommonResponse> {
|
||||||
return (node_fetch(input, init) as unknown) as Promise<CommonResponse>;
|
return (node_fetch(input, init) as unknown) as Promise<CommonResponse>;
|
||||||
}
|
}
|
||||||
|
@ -26,20 +23,6 @@ export class NodeFetchHttpClient extends FetchHttpClient {
|
||||||
async prepareRequest(httpRequest: WebResourceLike): Promise<Partial<RequestInit>> {
|
async prepareRequest(httpRequest: WebResourceLike): Promise<Partial<RequestInit>> {
|
||||||
const requestInit: Partial<RequestInit & { agent?: any }> = {};
|
const requestInit: Partial<RequestInit & { agent?: any }> = {};
|
||||||
|
|
||||||
if (this.cookieJar && !httpRequest.headers.get("Cookie")) {
|
|
||||||
const cookieString = await new Promise<string>((resolve, reject) => {
|
|
||||||
this.cookieJar!.getCookieString(httpRequest.url, (err, cookie) => {
|
|
||||||
if (err) {
|
|
||||||
reject(err);
|
|
||||||
} else {
|
|
||||||
resolve(cookie);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
httpRequest.headers.set("Cookie", cookieString);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (httpRequest.agentSettings) {
|
if (httpRequest.agentSettings) {
|
||||||
const { http: httpAgent, https: httpsAgent } = httpRequest.agentSettings;
|
const { http: httpAgent, https: httpsAgent } = httpRequest.agentSettings;
|
||||||
if (httpsAgent && httpRequest.url.startsWith("https")) {
|
if (httpsAgent && httpRequest.url.startsWith("https")) {
|
||||||
|
@ -71,25 +54,8 @@ export class NodeFetchHttpClient extends FetchHttpClient {
|
||||||
return requestInit;
|
return requestInit;
|
||||||
}
|
}
|
||||||
|
|
||||||
async processRequest(operationResponse: HttpOperationResponse): Promise<void> {
|
async processRequest(_operationResponse: HttpOperationResponse): Promise<void> {
|
||||||
if (this.cookieJar) {
|
/* no_op */
|
||||||
const setCookieHeader = operationResponse.headers.get("Set-Cookie");
|
return;
|
||||||
if (setCookieHeader != undefined) {
|
|
||||||
await new Promise((resolve, reject) => {
|
|
||||||
this.cookieJar!.setCookie(
|
|
||||||
setCookieHeader,
|
|
||||||
operationResponse.request.url,
|
|
||||||
{ ignoreError: true },
|
|
||||||
(err) => {
|
|
||||||
if (err) {
|
|
||||||
reject(err);
|
|
||||||
} else {
|
|
||||||
resolve();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -55,7 +55,6 @@
|
||||||
"abort-controller": "^3.0.0",
|
"abort-controller": "^3.0.0",
|
||||||
"form-data": "^2.5.0",
|
"form-data": "^2.5.0",
|
||||||
"node-fetch": "^2.6.7",
|
"node-fetch": "^2.6.7",
|
||||||
"tough-cookie": "^3.0.1",
|
|
||||||
"tslib": "^1.10.0",
|
"tslib": "^1.10.0",
|
||||||
"tunnel": "0.0.6",
|
"tunnel": "0.0.6",
|
||||||
"uuid": "^8.3.2",
|
"uuid": "^8.3.2",
|
||||||
|
@ -78,7 +77,6 @@
|
||||||
"@types/node-fetch": "^2.3.7",
|
"@types/node-fetch": "^2.3.7",
|
||||||
"@types/semver": "^6.0.1",
|
"@types/semver": "^6.0.1",
|
||||||
"@types/sinon": "^7.0.13",
|
"@types/sinon": "^7.0.13",
|
||||||
"@types/tough-cookie": "^2.3.5",
|
|
||||||
"@types/trusted-types": "^2.0.0",
|
"@types/trusted-types": "^2.0.0",
|
||||||
"@types/tunnel": "0.0.1",
|
"@types/tunnel": "0.0.1",
|
||||||
"@types/uuid": "^8.3.2",
|
"@types/uuid": "^8.3.2",
|
||||||
|
|
|
@ -199,7 +199,7 @@ export class DefaultHttpClient extends FetchHttpClient {
|
||||||
// (undocumented)
|
// (undocumented)
|
||||||
prepareRequest(httpRequest: WebResourceLike): Promise<Partial<RequestInit>>;
|
prepareRequest(httpRequest: WebResourceLike): Promise<Partial<RequestInit>>;
|
||||||
// (undocumented)
|
// (undocumented)
|
||||||
processRequest(operationResponse: HttpOperationResponse): Promise<void>;
|
processRequest(_operationResponse: HttpOperationResponse): Promise<void>;
|
||||||
}
|
}
|
||||||
|
|
||||||
// @public
|
// @public
|
||||||
|
|
|
@ -11,11 +11,8 @@ import { RestError } from "../lib/restError";
|
||||||
import { isNode } from "../lib/util/utils";
|
import { isNode } from "../lib/util/utils";
|
||||||
import { WebResource, HttpRequestBody, TransferProgressEvent } from "../lib/webResource";
|
import { WebResource, HttpRequestBody, TransferProgressEvent } from "../lib/webResource";
|
||||||
import { getHttpMock, HttpMockFacade } from "./mockHttp";
|
import { getHttpMock, HttpMockFacade } from "./mockHttp";
|
||||||
import { TestFunction } from "mocha";
|
|
||||||
import { CommonResponse } from "../lib/fetchHttpClient";
|
import { CommonResponse } from "../lib/fetchHttpClient";
|
||||||
|
|
||||||
const nodeIt = (isNode ? it : it.skip) as TestFunction;
|
|
||||||
|
|
||||||
function getAbortController(): AbortController {
|
function getAbortController(): AbortController {
|
||||||
let controller: AbortController;
|
let controller: AbortController;
|
||||||
if (typeof AbortController === "function") {
|
if (typeof AbortController === "function") {
|
||||||
|
@ -98,39 +95,6 @@ describe("defaultHttpClient", function () {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
nodeIt("should not overwrite a user-provided cookie (nodejs only)", async function () {
|
|
||||||
// Cookie is only allowed to be set by the browser based on an actual response Set-Cookie header
|
|
||||||
httpMock.get("http://my.fake.domain/set-cookie", {
|
|
||||||
status: 200,
|
|
||||||
headers: {
|
|
||||||
"Set-Cookie": "data=123456",
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
httpMock.get("http://my.fake.domain/cookie", async (_url, _method, _body, headers) => {
|
|
||||||
return {
|
|
||||||
status: 200,
|
|
||||||
headers: headers,
|
|
||||||
};
|
|
||||||
});
|
|
||||||
|
|
||||||
const client = getMockedHttpClient();
|
|
||||||
|
|
||||||
const request1 = new WebResource("http://my.fake.domain/set-cookie");
|
|
||||||
const response1 = await client.sendRequest(request1);
|
|
||||||
response1.headers.get("Set-Cookie")!.should.equal("data=123456");
|
|
||||||
|
|
||||||
const request2 = new WebResource("http://my.fake.domain/cookie");
|
|
||||||
const response2 = await client.sendRequest(request2);
|
|
||||||
response2.headers.get("Cookie")!.should.equal("data=123456");
|
|
||||||
|
|
||||||
const request3 = new WebResource("http://my.fake.domain/cookie", "GET", undefined, undefined, {
|
|
||||||
Cookie: "data=abcdefg",
|
|
||||||
});
|
|
||||||
const response3 = await client.sendRequest(request3);
|
|
||||||
response3.headers.get("Cookie")!.should.equal("data=abcdefg");
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should allow canceling multiple requests with one token", async function () {
|
it("should allow canceling multiple requests with one token", async function () {
|
||||||
httpMock.post("/fileupload", async () => {
|
httpMock.post("/fileupload", async () => {
|
||||||
await sleep(1000);
|
await sleep(1000);
|
||||||
|
|
Загрузка…
Ссылка в новой задаче