marcattacks 2.2.5 → 2.2.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +17 -2
- package/dist/attacker.d.ts +24 -1
- package/dist/attacker.d.ts.map +1 -1
- package/dist/attacker.js +139 -131
- package/dist/attacker.js.map +1 -1
- package/dist/command.d.ts +3 -0
- package/dist/command.d.ts.map +1 -0
- package/dist/command.js +148 -0
- package/dist/command.js.map +1 -0
- package/dist/globber.d.ts +3 -0
- package/dist/globber.d.ts.map +1 -0
- package/dist/globber.js +131 -0
- package/dist/globber.js.map +1 -0
- package/dist/output/json.d.ts.map +1 -1
- package/dist/output/json.js +3 -5
- package/dist/output/json.js.map +1 -1
- package/dist/output/rdf.js +2 -2
- package/dist/output/xml.d.ts.map +1 -1
- package/dist/output/xml.js +3 -5
- package/dist/output/xml.js.map +1 -1
- package/dist/{filestream.d.ts → stream/filestream.d.ts} +1 -0
- package/dist/stream/filestream.d.ts.map +1 -0
- package/dist/stream/filestream.js +65 -0
- package/dist/stream/filestream.js.map +1 -0
- package/dist/stream/httpstream.d.ts.map +1 -0
- package/dist/{httpstream.js → stream/httpstream.js} +7 -3
- package/dist/stream/httpstream.js.map +1 -0
- package/dist/{s3stream.d.ts → stream/s3stream.d.ts} +1 -0
- package/dist/stream/s3stream.d.ts.map +1 -0
- package/dist/{s3stream.js → stream/s3stream.js} +80 -7
- package/dist/stream/s3stream.js.map +1 -0
- package/dist/{sftpstream.d.ts → stream/sftpstream.d.ts} +1 -0
- package/dist/stream/sftpstream.d.ts.map +1 -0
- package/dist/{sftpstream.js → stream/sftpstream.js} +66 -2
- package/dist/stream/sftpstream.js.map +1 -0
- package/dist/stream/slow-writable.d.ts.map +1 -0
- package/dist/stream/slow-writable.js.map +1 -0
- package/dist/util/stream_helpers.d.ts +12 -0
- package/dist/util/stream_helpers.d.ts.map +1 -1
- package/dist/util/stream_helpers.js +31 -13
- package/dist/util/stream_helpers.js.map +1 -1
- package/package.json +3 -2
- package/dist/filestream.d.ts.map +0 -1
- package/dist/filestream.js +0 -32
- package/dist/filestream.js.map +0 -1
- package/dist/httpstream.d.ts.map +0 -1
- package/dist/httpstream.js.map +0 -1
- package/dist/s3stream.d.ts.map +0 -1
- package/dist/s3stream.js.map +0 -1
- package/dist/sftpstream.d.ts.map +0 -1
- package/dist/sftpstream.js.map +0 -1
- package/dist/slow-writable.d.ts.map +0 -1
- package/dist/slow-writable.js.map +0 -1
- /package/dist/{httpstream.d.ts → stream/httpstream.d.ts} +0 -0
- /package/dist/{slow-writable.d.ts → stream/slow-writable.d.ts} +0 -0
- /package/dist/{slow-writable.js → stream/slow-writable.js} +0 -0
package/README.md
CHANGED
|
@@ -80,7 +80,7 @@ marcattacks http://somewhere.org/data.xml
|
|
|
80
80
|
An S3 path
|
|
81
81
|
|
|
82
82
|
```
|
|
83
|
-
marcattacks s3://accessKey:secretKey@
|
|
83
|
+
marcattacks s3://accessKey:secretKey@hostname:port/bucket/key
|
|
84
84
|
```
|
|
85
85
|
|
|
86
86
|
use `s3s://...` for using an SSL layer.
|
|
@@ -159,4 +159,19 @@ Available variables:
|
|
|
159
159
|
- S3_ACCESS_KEY
|
|
160
160
|
- S3_SECRET_KEY
|
|
161
161
|
|
|
162
|
-
A SFTP private key can be provided using the `--key-env` command line option. E.g. `--key-env PRIVATE_KEY`, which results reading a `PRIVATE_KEY` environment variable.
|
|
162
|
+
A SFTP private key can be provided using the `--key-env` command line option. E.g. `--key-env PRIVATE_KEY`, which results reading a `PRIVATE_KEY` environment variable.
|
|
163
|
+
|
|
164
|
+
## Discover files at a (remote) endpoint
|
|
165
|
+
|
|
166
|
+
Find all files that end with xml on an sftp site:
|
|
167
|
+
|
|
168
|
+
```
|
|
169
|
+
npx globtrotr --key ~/.ssh/mykey sftp://username@hostname:port/remote/path/@glob:xml
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
Or, for an S3 site:
|
|
173
|
+
|
|
174
|
+
```
|
|
175
|
+
npx globtrotr s3s://accessKey:privateKey@hostname:port/bucket/@glob:xml
|
|
176
|
+
```
|
|
177
|
+
|
package/dist/attacker.d.ts
CHANGED
|
@@ -1,6 +1,29 @@
|
|
|
1
|
+
import { Readable } from 'stream';
|
|
2
|
+
import { type Transform, type Writable } from 'node:stream';
|
|
1
3
|
export declare class PipelineError extends Error {
|
|
2
4
|
readonly statusCode: number;
|
|
3
5
|
constructor(message: string, statusCode: number);
|
|
4
6
|
}
|
|
5
|
-
export declare function
|
|
7
|
+
export declare function createInputReadStream(url: URL, opts: any): Promise<{
|
|
8
|
+
stream: Readable;
|
|
9
|
+
resolvedUrl: URL;
|
|
10
|
+
}>;
|
|
11
|
+
export declare function createDecompressionStage(url: URL, opts: {
|
|
12
|
+
z?: boolean;
|
|
13
|
+
}): Promise<Transform | null>;
|
|
14
|
+
export declare function createUntarStage(url: URL, opts: {
|
|
15
|
+
tar?: boolean;
|
|
16
|
+
}): Promise<Transform | null>;
|
|
17
|
+
export declare function createInputTransformStage(url: URL, opts: {
|
|
18
|
+
from: string;
|
|
19
|
+
param?: any;
|
|
20
|
+
}): Promise<Transform>;
|
|
21
|
+
export declare function createCountSkipStage(opts: {
|
|
22
|
+
count?: number;
|
|
23
|
+
skip?: number;
|
|
24
|
+
}): Promise<Transform | null>;
|
|
25
|
+
export declare function createMapTransformStage(opts: any): Promise<Transform | null>;
|
|
26
|
+
export declare function createOutputWriteStream(opts: any): Promise<Writable>;
|
|
27
|
+
export declare function createOutputTransformStage(opts: any): Promise<Transform | null>;
|
|
28
|
+
export declare function attack(url: URL, opts: any): Promise<number>;
|
|
6
29
|
//# sourceMappingURL=attacker.d.ts.map
|
package/dist/attacker.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attacker.d.ts","sourceRoot":"","sources":["../src/attacker.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"attacker.d.ts","sourceRoot":"","sources":["../src/attacker.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAClC,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAC;AAgB5D,qBAAa,aAAc,SAAQ,KAAK;IACpC,SAAgB,UAAU,EAAE,MAAM,CAAC;gBAEvB,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;CAUlD;AAED,wBAAsB,qBAAqB,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC;IAAE,MAAM,EAAE,QAAQ,CAAC;IAAC,WAAW,EAAE,GAAG,CAAA;CAAE,CAAC,CA2ChH;AAED,wBAAsB,wBAAwB,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE;IAAE,CAAC,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAKzG;AAED,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE;IAAE,GAAG,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAKnG;AAED,wBAAsB,yBAAyB,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,GAAG,CAAA;CAAC,GAAG,OAAO,CAAC,SAAS,CAAC,CAQ/G;AAED,wBAAsB,oBAAoB,CAAC,IAAI,EAAE;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAC,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAK3G;AAED,wBAAsB,uBAAuB,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAMlF;AAED,wBAAsB,uBAAuB,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,CAgD1E;AAED,wBAAsB,0BAA0B,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAMrF;AAED,wBAAsB,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CA+DjE"}
|
package/dist/attacker.js
CHANGED
|
@@ -1,17 +1,15 @@
|
|
|
1
1
|
import log4js from 'log4js';
|
|
2
2
|
import { loadPlugin } from './plugin-loader.js';
|
|
3
|
-
import { sftpLatestFile, sftpReadStream, sftpWriteStream } from './sftpstream.js';
|
|
4
|
-
import { httpReadStream } from './httpstream.js';
|
|
3
|
+
import { sftpLatestFile, sftpReadStream, sftpWriteStream } from './stream/sftpstream.js';
|
|
4
|
+
import { httpReadStream } from './stream/httpstream.js';
|
|
5
5
|
import { Readable } from 'stream';
|
|
6
|
-
import { pathToFileURL } from "node:url";
|
|
7
6
|
import {} from 'node:stream';
|
|
8
|
-
import { SlowWritable } from './slow-writable.js';
|
|
9
|
-
import path from "node:path";
|
|
7
|
+
import { SlowWritable } from './stream/slow-writable.js';
|
|
10
8
|
import fs from 'fs';
|
|
11
|
-
import { s3LatestObject, s3ReadStream, s3WriteStream } from './s3stream.js';
|
|
9
|
+
import { s3LatestObject, s3ReadStream, s3WriteStream } from './stream/s3stream.js';
|
|
12
10
|
import { pipeline } from 'node:stream/promises';
|
|
13
|
-
import { createCountableSkippedStream, createUntarredStream, createUncompressedStream, createVerboseStream } from './util/stream_helpers.js';
|
|
14
|
-
import { fileLatestFile, fileReadStream } from './filestream.js';
|
|
11
|
+
import { createCountableSkippedStream, createUntarredStream, createUncompressedStream, createVerboseStream, getCleanURL } from './util/stream_helpers.js';
|
|
12
|
+
import { fileLatestFile, fileReadStream } from './stream/filestream.js';
|
|
15
13
|
const logger = log4js.getLogger();
|
|
16
14
|
export class PipelineError extends Error {
|
|
17
15
|
statusCode;
|
|
@@ -24,135 +22,152 @@ export class PipelineError extends Error {
|
|
|
24
22
|
}
|
|
25
23
|
}
|
|
26
24
|
}
|
|
27
|
-
export async function
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
25
|
+
export async function createInputReadStream(url, opts) {
|
|
26
|
+
logger.info(`using: ${getCleanURL(url)}`);
|
|
27
|
+
let readableStream;
|
|
28
|
+
let resolvedUrl = url;
|
|
29
|
+
if (url.protocol.startsWith("http")) {
|
|
30
|
+
readableStream = await httpReadStream(url.toString());
|
|
31
|
+
}
|
|
32
|
+
else if (url.protocol.startsWith("s3")) {
|
|
33
|
+
if (process.env.S3_ACCESS_KEY) {
|
|
34
|
+
url.username = process.env.S3_ACCESS_KEY;
|
|
34
35
|
}
|
|
35
|
-
|
|
36
|
-
|
|
36
|
+
if (process.env.S3_SECRET_KEY) {
|
|
37
|
+
url.password = process.env.S3_SECRET_KEY;
|
|
37
38
|
}
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
39
|
+
resolvedUrl = await s3LatestObject(url, opts);
|
|
40
|
+
readableStream = await s3ReadStream(resolvedUrl, opts);
|
|
41
|
+
}
|
|
42
|
+
else if (url.protocol === 'sftp:') {
|
|
43
|
+
if (process.env.SFTP_USERNAME) {
|
|
44
|
+
url.username = process.env.SFTP_USERNAME;
|
|
42
45
|
}
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
if (process.env.S3_ACCESS_KEY) {
|
|
46
|
-
url.username = process.env.S3_ACCESS_KEY;
|
|
47
|
-
}
|
|
48
|
-
if (process.env.S3_SECRET_KEY) {
|
|
49
|
-
url.password = process.env.S3_SECRET_KEY;
|
|
50
|
-
}
|
|
51
|
-
// optional resolve @latest
|
|
52
|
-
inputFile = await s3LatestObject(url, opts);
|
|
53
|
-
readableStream = await s3ReadStream(inputFile, opts);
|
|
46
|
+
if (process.env.SFTP_PASSWORD) {
|
|
47
|
+
url.password = process.env.SFTP_PASSWORD;
|
|
54
48
|
}
|
|
55
|
-
|
|
56
|
-
|
|
49
|
+
resolvedUrl = await sftpLatestFile(url, opts);
|
|
50
|
+
readableStream = await sftpReadStream(resolvedUrl, opts);
|
|
51
|
+
}
|
|
52
|
+
else if (url.protocol === 'stdin:') {
|
|
53
|
+
readableStream = process.stdin;
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
resolvedUrl = await fileLatestFile(url);
|
|
57
|
+
readableStream = await fileReadStream(resolvedUrl);
|
|
58
|
+
}
|
|
59
|
+
return { stream: readableStream, resolvedUrl: resolvedUrl };
|
|
60
|
+
}
|
|
61
|
+
export async function createDecompressionStage(url, opts) {
|
|
62
|
+
if (opts.z || url.pathname.endsWith(".gz")) {
|
|
63
|
+
return createUncompressedStream();
|
|
64
|
+
}
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
export async function createUntarStage(url, opts) {
|
|
68
|
+
if (opts.tar || url.pathname.match(/.tar(.\w+$)?$/) || url.pathname.endsWith(".tgz")) {
|
|
69
|
+
return await createUntarredStream();
|
|
70
|
+
}
|
|
71
|
+
return null;
|
|
72
|
+
}
|
|
73
|
+
export async function createInputTransformStage(url, opts) {
|
|
74
|
+
if (!opts.from) {
|
|
75
|
+
console.error(`Need --from`);
|
|
76
|
+
process.exit(1);
|
|
77
|
+
}
|
|
78
|
+
const mod = await loadPlugin(opts.from, 'input');
|
|
79
|
+
return await mod.transform(Object.assign({ path: url }, opts.param));
|
|
80
|
+
}
|
|
81
|
+
export async function createCountSkipStage(opts) {
|
|
82
|
+
if (opts.count || opts.skip) {
|
|
83
|
+
return createCountableSkippedStream(opts.count, opts.skip);
|
|
84
|
+
}
|
|
85
|
+
return null;
|
|
86
|
+
}
|
|
87
|
+
export async function createMapTransformStage(opts) {
|
|
88
|
+
if (opts.map) {
|
|
89
|
+
const mod = await loadPlugin(opts.map, 'transform');
|
|
90
|
+
return await mod.transform(opts.param);
|
|
91
|
+
}
|
|
92
|
+
return null;
|
|
93
|
+
}
|
|
94
|
+
export async function createOutputWriteStream(opts) {
|
|
95
|
+
if (isWritableStream(opts.out)) {
|
|
96
|
+
return opts.out;
|
|
97
|
+
}
|
|
98
|
+
if (opts.out === '@slow') {
|
|
99
|
+
return new SlowWritable({ delayMs: 100 });
|
|
100
|
+
}
|
|
101
|
+
if (opts.out === '@errors') {
|
|
102
|
+
return new SlowWritable({ simulateErrorEveryN: 2 });
|
|
103
|
+
}
|
|
104
|
+
if (opts.out) {
|
|
105
|
+
if (opts.out.startsWith("sftp")) {
|
|
106
|
+
const url = new URL(opts.out);
|
|
57
107
|
if (process.env.SFTP_USERNAME) {
|
|
58
108
|
url.username = process.env.SFTP_USERNAME;
|
|
59
109
|
}
|
|
60
110
|
if (process.env.SFTP_PASSWORD) {
|
|
61
111
|
url.password = process.env.SFTP_PASSWORD;
|
|
62
112
|
}
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
readableStream = await sftpReadStream(inputFile, opts);
|
|
66
|
-
}
|
|
67
|
-
else if (inputFile.protocol === 'stdin:') {
|
|
68
|
-
readableStream = process.stdin;
|
|
113
|
+
logger.info(`put ${getCleanURL(url)}`);
|
|
114
|
+
return await sftpWriteStream(url, opts);
|
|
69
115
|
}
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
116
|
+
if (opts.out.startsWith("s3")) {
|
|
117
|
+
const url = new URL(opts.out);
|
|
118
|
+
if (process.env.S3_ACCESS_KEY) {
|
|
119
|
+
url.username = process.env.S3_ACCESS_KEY;
|
|
120
|
+
}
|
|
121
|
+
if (process.env.S3_SECRET_KEY) {
|
|
122
|
+
url.password = process.env.S3_SECRET_KEY;
|
|
123
|
+
}
|
|
124
|
+
logger.info(`put ${getCleanURL(url)}`);
|
|
125
|
+
return await s3WriteStream(url, {});
|
|
73
126
|
}
|
|
127
|
+
return fs.createWriteStream(opts.out, { encoding: 'utf-8' });
|
|
128
|
+
}
|
|
129
|
+
return process.stdout;
|
|
130
|
+
}
|
|
131
|
+
export async function createOutputTransformStage(opts) {
|
|
132
|
+
if (opts.to) {
|
|
133
|
+
const mod = await loadPlugin(opts.to, 'output');
|
|
134
|
+
return await mod.transform(opts.param);
|
|
135
|
+
}
|
|
136
|
+
return null;
|
|
137
|
+
}
|
|
138
|
+
export async function attack(url, opts) {
|
|
139
|
+
let result = 0;
|
|
140
|
+
try {
|
|
141
|
+
const { stream: readableStream, resolvedUrl: inputFile } = await createInputReadStream(url, opts);
|
|
74
142
|
const stages = [readableStream];
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
if (
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
process.exitCode = 2;
|
|
92
|
-
}
|
|
93
|
-
});
|
|
94
|
-
transformer.on('finish', () => logger.debug('writeable finished'));
|
|
95
|
-
transformer.on('end', () => logger.debug('readable ended'));
|
|
96
|
-
transformer.on('close', () => logger.debug('stream closed'));
|
|
97
|
-
stages.push(transformer);
|
|
98
|
-
}
|
|
99
|
-
else {
|
|
100
|
-
console.error(`Need --from`);
|
|
101
|
-
process.exit(1);
|
|
102
|
-
}
|
|
103
|
-
if (opts.count || opts.skip) {
|
|
104
|
-
stages.push(createCountableSkippedStream(opts.count, opts.skip));
|
|
105
|
-
}
|
|
143
|
+
// Add decompression stage if needed
|
|
144
|
+
const decompressionStage = await createDecompressionStage(inputFile, opts);
|
|
145
|
+
if (decompressionStage)
|
|
146
|
+
stages.push(decompressionStage);
|
|
147
|
+
// Add untar stage if needed
|
|
148
|
+
const untarStage = await createUntarStage(inputFile, opts);
|
|
149
|
+
if (untarStage)
|
|
150
|
+
stages.push(untarStage);
|
|
151
|
+
// Add input transform stage (required)
|
|
152
|
+
const inputTransform = await createInputTransformStage(inputFile, opts);
|
|
153
|
+
stages.push(inputTransform);
|
|
154
|
+
// Add count/skip stage if needed
|
|
155
|
+
const countSkipStage = await createCountSkipStage(opts);
|
|
156
|
+
if (countSkipStage)
|
|
157
|
+
stages.push(countSkipStage);
|
|
158
|
+
// Add verbose stream (always included)
|
|
106
159
|
const verboseStream = createVerboseStream();
|
|
107
160
|
stages.push(verboseStream);
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
stages.push(
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
if (
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
outStream = new SlowWritable({ delayMs: 100 });
|
|
119
|
-
}
|
|
120
|
-
else if (opts.out === '@errors') {
|
|
121
|
-
outStream = new SlowWritable({ simulateErrorEveryN: 2 });
|
|
122
|
-
}
|
|
123
|
-
else if (opts.out) {
|
|
124
|
-
if (opts.out.startsWith("sftp")) {
|
|
125
|
-
const url = new URL(opts.out);
|
|
126
|
-
if (process.env.SFTP_USERNAME) {
|
|
127
|
-
url.username = process.env.SFTP_USERNAME;
|
|
128
|
-
}
|
|
129
|
-
if (process.env.SFTP_PASSWORD) {
|
|
130
|
-
url.password = process.env.SFTP_PASSWORD;
|
|
131
|
-
}
|
|
132
|
-
logger.info(`put ${getCleanURL(url)}`);
|
|
133
|
-
outStream = await sftpWriteStream(url, opts);
|
|
134
|
-
}
|
|
135
|
-
else if (opts.out.startsWith("s3")) {
|
|
136
|
-
const url = new URL(opts.out);
|
|
137
|
-
if (process.env.S3_ACCESS_KEY) {
|
|
138
|
-
url.username = process.env.S3_ACCESS_KEY;
|
|
139
|
-
}
|
|
140
|
-
if (process.env.S3_SECRET_KEY) {
|
|
141
|
-
url.password = process.env.S3_SECRET_KEY;
|
|
142
|
-
}
|
|
143
|
-
logger.info(`put ${getCleanURL(url)}`);
|
|
144
|
-
outStream = await s3WriteStream(url, {});
|
|
145
|
-
}
|
|
146
|
-
else {
|
|
147
|
-
outStream = fs.createWriteStream(opts.out, { encoding: 'utf-8' });
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
else {
|
|
151
|
-
outStream = process.stdout;
|
|
152
|
-
}
|
|
153
|
-
if (opts.to) {
|
|
154
|
-
const mod = await loadPlugin(opts.to, 'output');
|
|
155
|
-
stages.push(await mod.transform(opts.param));
|
|
161
|
+
// Add map transform stage if needed
|
|
162
|
+
const mapStage = await createMapTransformStage(opts);
|
|
163
|
+
if (mapStage)
|
|
164
|
+
stages.push(mapStage);
|
|
165
|
+
// Add output transform stage if needed
|
|
166
|
+
const outputTransform = await createOutputTransformStage(opts);
|
|
167
|
+
if (outputTransform) {
|
|
168
|
+
stages.push(outputTransform);
|
|
169
|
+
// Add output write stream
|
|
170
|
+
const outStream = await createOutputWriteStream(opts);
|
|
156
171
|
stages.push(outStream);
|
|
157
172
|
try {
|
|
158
173
|
await pipeline(stages);
|
|
@@ -173,27 +188,20 @@ export async function attack(url, opts) {
|
|
|
173
188
|
}
|
|
174
189
|
catch (e) {
|
|
175
190
|
if (e instanceof PipelineError) {
|
|
176
|
-
throw
|
|
191
|
+
throw e;
|
|
177
192
|
}
|
|
178
193
|
else {
|
|
179
194
|
logger.error(`process crashed with: ${e}`);
|
|
180
|
-
throw
|
|
195
|
+
throw e;
|
|
181
196
|
}
|
|
182
197
|
}
|
|
183
198
|
return result;
|
|
184
199
|
}
|
|
185
|
-
function getCleanURL(url) {
|
|
186
|
-
const tempUrl = new URL(url.href); // Clone to avoid mutating original
|
|
187
|
-
tempUrl.username = '***';
|
|
188
|
-
tempUrl.password = '***';
|
|
189
|
-
return tempUrl;
|
|
190
|
-
}
|
|
191
200
|
function isWritableStream(obj) {
|
|
192
201
|
return (obj !== null &&
|
|
193
202
|
typeof obj === 'object' &&
|
|
194
203
|
typeof obj.write === 'function' &&
|
|
195
204
|
typeof obj.end === 'function' &&
|
|
196
|
-
// internal state check
|
|
197
205
|
obj.writable !== false);
|
|
198
206
|
}
|
|
199
207
|
//# sourceMappingURL=attacker.js.map
|
package/dist/attacker.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attacker.js","sourceRoot":"","sources":["../src/attacker.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,cAAc,EAAG,eAAe,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"attacker.js","sourceRoot":"","sources":["../src/attacker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../src/command.ts"],"names":[],"mappings":""}
|
package/dist/command.js
ADDED
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import log4js from 'log4js';
|
|
3
|
+
import { program } from 'commander';
|
|
4
|
+
import path from "node:path";
|
|
5
|
+
import dotenv from 'dotenv';
|
|
6
|
+
import { attack, PipelineError } from './attacker.js';
|
|
7
|
+
import { createRequire } from 'node:module';
|
|
8
|
+
import { pathToFileURL } from "node:url";
|
|
9
|
+
import fs from 'fs';
|
|
10
|
+
const require = createRequire(import.meta.url);
|
|
11
|
+
const pkg = require('../package.json');
|
|
12
|
+
program.version(pkg.version)
|
|
13
|
+
.argument('<file>')
|
|
14
|
+
.option('-c,--config <config>', 'config .env', path.join(process.cwd(), '.env'))
|
|
15
|
+
.option('-f,--from <from>', 'input type', 'xml')
|
|
16
|
+
.option('-t,--to <output>', 'output type', 'json')
|
|
17
|
+
.option('-m,--map <map>', 'data mapper', 'jsonata')
|
|
18
|
+
.option('--fix <what>', 'jsonata')
|
|
19
|
+
.option('-p,--param <key=value>', 'repeated params', collect, {})
|
|
20
|
+
.option('-o,--out <file>', 'output file')
|
|
21
|
+
.option('--z', 'uncompress input')
|
|
22
|
+
.option('--tar', 'untar input')
|
|
23
|
+
.option('--count <num>', 'output only <num> records')
|
|
24
|
+
.option('--skip <num>', 'skip first <num> records')
|
|
25
|
+
.option('--key <keyfile>', 'private key file')
|
|
26
|
+
.option('--key-env <env>', 'private key environment variable')
|
|
27
|
+
.option('--log <format>', 'logging format')
|
|
28
|
+
.option('--info', 'output debugging messages')
|
|
29
|
+
.option('--debug', 'output more debugging messages')
|
|
30
|
+
.option('--trace', 'output much more debugging messages');
|
|
31
|
+
program.parse(process.argv);
|
|
32
|
+
const opts = program.opts();
|
|
33
|
+
if (opts.log) {
|
|
34
|
+
let output = 'stderr';
|
|
35
|
+
let type = 0;
|
|
36
|
+
if (opts.log.indexOf('stdout') >= 0) {
|
|
37
|
+
output = 'stdout';
|
|
38
|
+
}
|
|
39
|
+
if (opts.log.indexOf('json') >= 0) {
|
|
40
|
+
type = 1;
|
|
41
|
+
}
|
|
42
|
+
if (type) {
|
|
43
|
+
configureJSONLogger(output);
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
configureDefaultLogger(output);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
configureDefaultLogger('stderr');
|
|
51
|
+
}
|
|
52
|
+
const logger = log4js.getLogger();
|
|
53
|
+
if (opts.info) {
|
|
54
|
+
logger.level = "info";
|
|
55
|
+
}
|
|
56
|
+
if (opts.debug) {
|
|
57
|
+
logger.level = "debug";
|
|
58
|
+
}
|
|
59
|
+
if (opts.trace) {
|
|
60
|
+
logger.level = "trace";
|
|
61
|
+
}
|
|
62
|
+
if (opts.config) {
|
|
63
|
+
dotenv.config({ path: opts.config, quiet: true });
|
|
64
|
+
}
|
|
65
|
+
main();
|
|
66
|
+
function configureDefaultLogger(output) {
|
|
67
|
+
log4js.configure({
|
|
68
|
+
appenders: {
|
|
69
|
+
err: {
|
|
70
|
+
type: output,
|
|
71
|
+
layout: {
|
|
72
|
+
type: "pattern",
|
|
73
|
+
pattern: "%[%d %p %f{2} %m%]"
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
},
|
|
77
|
+
categories: {
|
|
78
|
+
default: { appenders: ["err"], level: "off", enableCallStack: true }
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
function configureJSONLogger(output) {
|
|
83
|
+
log4js.addLayout('json-pattern', (config) => {
|
|
84
|
+
return (logEvent) => {
|
|
85
|
+
return JSON.stringify({
|
|
86
|
+
timestamp: logEvent.startTime, // Similar to %d
|
|
87
|
+
level: logEvent.level.levelStr, // Similar to %p
|
|
88
|
+
category: logEvent.categoryName, // Similar to %c
|
|
89
|
+
message: logEvent.data.join(' '), // Similar to %m
|
|
90
|
+
context: logEvent.context, // Similar to %X (tokens)
|
|
91
|
+
pid: logEvent.pid // Similar to %z
|
|
92
|
+
});
|
|
93
|
+
};
|
|
94
|
+
});
|
|
95
|
+
log4js.configure({
|
|
96
|
+
appenders: {
|
|
97
|
+
err: {
|
|
98
|
+
type: output,
|
|
99
|
+
layout: {
|
|
100
|
+
type: "json-pattern"
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
},
|
|
104
|
+
categories: {
|
|
105
|
+
default: { appenders: ["err"], level: "off", enableCallStack: true }
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
async function main() {
|
|
110
|
+
try {
|
|
111
|
+
const url = program.args[0];
|
|
112
|
+
if (!url) {
|
|
113
|
+
console.error(`need an input file`);
|
|
114
|
+
process.exit(2);
|
|
115
|
+
}
|
|
116
|
+
let inputFile;
|
|
117
|
+
if (fs.existsSync(url)) {
|
|
118
|
+
const filePath = path.resolve(process.cwd(), url);
|
|
119
|
+
inputFile = pathToFileURL(filePath);
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
inputFile = new URL(url);
|
|
123
|
+
}
|
|
124
|
+
const result = await attack(inputFile, opts);
|
|
125
|
+
logger.info(`total: ${result}`);
|
|
126
|
+
}
|
|
127
|
+
catch (e) {
|
|
128
|
+
if (e instanceof PipelineError) {
|
|
129
|
+
logger.error("pipeline error:", e);
|
|
130
|
+
process.exitCode = e.statusCode;
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
logger.error("process crashed:", e);
|
|
134
|
+
process.exitCode = 8;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
function collect(value, previous) {
|
|
139
|
+
const keyval = value.split("=", 2);
|
|
140
|
+
if (keyval.length == 2 && keyval[0]) {
|
|
141
|
+
previous[keyval[0]] = keyval[1];
|
|
142
|
+
return previous;
|
|
143
|
+
}
|
|
144
|
+
else {
|
|
145
|
+
return previous;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
//# sourceMappingURL=command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command.js","sourceRoot":"","sources":["../src/command.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"globber.d.ts","sourceRoot":"","sources":["../src/globber.ts"],"names":[],"mappings":""}
|