PHP WebShell
Текущая директория: /usr/lib/node_modules/bitgo/node_modules/metro/src/Server
Просмотр файла: MultipartResponse.js.flow
/**
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @flow strict
* @format
* @oncall react_native
*/
import type {IncomingMessage, ServerResponse} from 'http';
import accepts from 'accepts';
const CRLF = '\r\n';
const BOUNDARY = '3beqjf3apnqeu3h5jqorms4i';
type Data = string | Buffer | Uint8Array;
type Headers = {[string]: string | number};
export default class MultipartResponse {
static wrapIfSupported(
req: IncomingMessage,
res: ServerResponse,
): MultipartResponse | ServerResponse {
if (accepts(req).types().includes('multipart/mixed')) {
return new MultipartResponse(res);
}
return res;
}
static serializeHeaders(headers: Headers): string {
return Object.keys(headers)
.map(key => `${key}: ${headers[key]}`)
.join(CRLF);
}
res: ServerResponse;
headers: Headers;
constructor(res: ServerResponse) {
this.res = res;
this.headers = {};
res.writeHead(200, {
'Content-Type': `multipart/mixed; boundary="${BOUNDARY}"`,
});
res.write(
'If you are seeing this, your client does not support multipart response',
);
}
writeChunk(
headers: Headers | null,
data?: Data,
isLast?: boolean = false,
): void {
if (this.res.finished) {
return;
}
this.res.write(`${CRLF}--${BOUNDARY}${CRLF}`);
if (headers) {
this.res.write(MultipartResponse.serializeHeaders(headers) + CRLF + CRLF);
}
if (data != null) {
this.res.write(data);
}
if (isLast) {
this.res.write(`${CRLF}--${BOUNDARY}--${CRLF}`);
}
}
writeHead(status: number, headers?: Headers): void {
// We can't actually change the response HTTP status code
// because the headers have already been sent
this.setHeader('X-Http-Status', status);
if (!headers) {
return;
}
for (const key in headers) {
this.setHeader(key, headers[key]);
}
}
setHeader(name: string, value: string | number): void {
this.headers[name] = value;
}
end(data?: Data): void {
this.writeChunk(this.headers, data, true);
this.res.end();
}
once(name: string, fn: () => mixed): this {
this.res.once(name, fn);
return this;
}
}
Выполнить команду
Для локальной разработки. Не используйте в интернете!