ssh-config 4.1.6 → 4.2.0

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.
@@ -0,0 +1,459 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.stringify = exports.parse = void 0;
7
+ const glob_1 = __importDefault(require("./glob"));
8
+ const child_process_1 = require("child_process");
9
+ const RE_SPACE = /\s/;
10
+ const RE_LINE_BREAK = /\r|\n/;
11
+ const RE_SECTION_DIRECTIVE = /^(Host|Match)$/i;
12
+ const RE_MULTI_VALUE_DIRECTIVE = /^(GlobalKnownHostsFile|Host|IPQoS|SendEnv|UserKnownHostsFile|ProxyCommand|Match)$/i;
13
+ const RE_QUOTE_DIRECTIVE = /^(?:CertificateFile|IdentityFile|IdentityAgent|User)$/i;
14
+ const RE_SINGLE_LINE_DIRECTIVE = /^(Include|IdentityFile)$/i;
15
+ var LineType;
16
+ (function (LineType) {
17
+ LineType[LineType["DIRECTIVE"] = 1] = "DIRECTIVE";
18
+ LineType[LineType["COMMENT"] = 2] = "COMMENT";
19
+ })(LineType || (LineType = {}));
20
+ const MULTIPLE_VALUE_PROPS = [
21
+ 'IdentityFile',
22
+ 'LocalForward',
23
+ 'RemoteForward',
24
+ 'DynamicForward',
25
+ 'CertificateFile',
26
+ ];
27
+ function compare(line, opts) {
28
+ return opts.hasOwnProperty(line.param) && opts[line.param] === line.value;
29
+ }
30
+ function getIndent(config) {
31
+ for (const line of config) {
32
+ if (line.type === LineType.DIRECTIVE && 'config' in line) {
33
+ for (const subline of line.config) {
34
+ if (subline.before) {
35
+ return subline.before;
36
+ }
37
+ }
38
+ }
39
+ }
40
+ return ' ';
41
+ }
42
+ function capitalize(str) {
43
+ if (typeof str !== 'string')
44
+ return str;
45
+ return str[0].toUpperCase() + str.slice(1);
46
+ }
47
+ function match(criteria, params) {
48
+ for (const key in criteria) {
49
+ const criterion = criteria[key];
50
+ const keyword = key.toLowerCase();
51
+ if (keyword === 'exec') {
52
+ const command = `function main {
53
+ ${criterion}
54
+ }
55
+ main`;
56
+ const { status } = (0, child_process_1.spawnSync)(command, { shell: true });
57
+ if (status != 0)
58
+ return false;
59
+ }
60
+ else if (!(0, glob_1.default)(criterion, params[capitalize(keyword)])) {
61
+ return false;
62
+ }
63
+ }
64
+ return true;
65
+ }
66
+ class SSHConfig extends Array {
67
+ /**
68
+ * Query ssh config by host.
69
+ */
70
+ compute(params) {
71
+ if (typeof params === 'string')
72
+ params = { Host: params };
73
+ const obj = {};
74
+ const setProperty = (name, value) => {
75
+ if (MULTIPLE_VALUE_PROPS.includes(name)) {
76
+ const list = obj[name] || (obj[name] = []);
77
+ list.push(value);
78
+ }
79
+ else if (obj[name] == null) {
80
+ obj[name] = value;
81
+ }
82
+ };
83
+ for (const line of this) {
84
+ if (line.type !== LineType.DIRECTIVE)
85
+ continue;
86
+ if (line.param === 'Host' && (0, glob_1.default)(line.value, params.Host)) {
87
+ setProperty(line.param, line.value);
88
+ for (const subline of line.config) {
89
+ if (subline.type === LineType.DIRECTIVE) {
90
+ setProperty(subline.param, subline.value);
91
+ }
92
+ }
93
+ }
94
+ else if (line.param === 'Match' && 'criteria' in line && match(line.criteria, params)) {
95
+ for (const subline of line.config) {
96
+ if (subline.type === LineType.DIRECTIVE) {
97
+ setProperty(subline.param, subline.value);
98
+ }
99
+ }
100
+ }
101
+ else {
102
+ setProperty(line.param, line.value);
103
+ }
104
+ }
105
+ return obj;
106
+ }
107
+ /**
108
+ * find section by Host / Match or function
109
+ */
110
+ find(opts) {
111
+ if (typeof opts === 'function')
112
+ return super.find(opts);
113
+ if (!(opts && ('Host' in opts || 'Match' in opts))) {
114
+ throw new Error('Can only find by Host or Match');
115
+ }
116
+ return super.find(line => compare(line, opts));
117
+ }
118
+ /**
119
+ * Remove section by Host / Match or function
120
+ */
121
+ remove(opts) {
122
+ let index;
123
+ if (typeof opts === 'function') {
124
+ index = super.findIndex(opts);
125
+ }
126
+ else if (!(opts && ('Host' in opts || 'Match' in opts))) {
127
+ throw new Error('Can only remove by Host or Match');
128
+ }
129
+ else {
130
+ index = super.findIndex(line => compare(line, opts));
131
+ }
132
+ if (index >= 0)
133
+ return this.splice(index, 1);
134
+ }
135
+ toString() {
136
+ return stringify(this);
137
+ }
138
+ /**
139
+ * Append new section to existing ssh config.
140
+ * @param {Object} opts
141
+ */
142
+ append(opts) {
143
+ const indent = getIndent(this);
144
+ const lastEntry = this.length > 0 ? this[this.length - 1] : null;
145
+ let config = lastEntry && lastEntry.config || this;
146
+ let configWas = this;
147
+ let lastLine = config.length > 0 ? config[config.length - 1] : lastEntry;
148
+ if (lastLine && !lastLine.after)
149
+ lastLine.after = '\n';
150
+ let sectionLineFound = config !== configWas;
151
+ for (const param in opts) {
152
+ const value = opts[param];
153
+ const line = {
154
+ type: LineType.DIRECTIVE,
155
+ param,
156
+ separator: ' ',
157
+ value,
158
+ before: sectionLineFound ? indent : indent.replace(/ |\t/, ''),
159
+ after: '\n',
160
+ };
161
+ if (RE_SECTION_DIRECTIVE.test(param)) {
162
+ sectionLineFound = true;
163
+ line.before = indent.replace(/ |\t/, '');
164
+ config = configWas;
165
+ // separate sections with an extra newline
166
+ // https://github.com/cyjake/ssh-config/issues/23#issuecomment-564768248
167
+ if (lastLine && lastLine.after === '\n')
168
+ lastLine.after += '\n';
169
+ config.push(line);
170
+ config = line.config = new SSHConfig();
171
+ }
172
+ else {
173
+ config.push(line);
174
+ }
175
+ lastLine = line;
176
+ }
177
+ return configWas;
178
+ }
179
+ /**
180
+ * Prepend new section to existing ssh config.
181
+ * @param {Object} opts
182
+ */
183
+ prepend(opts, beforeFirstSection = false) {
184
+ const indent = getIndent(this);
185
+ let config = this;
186
+ let i = 0;
187
+ // insert above known sections
188
+ if (beforeFirstSection) {
189
+ while (i < this.length && !('config' in this[i])) {
190
+ i += 1;
191
+ }
192
+ if (i >= this.length) { // No sections in original config
193
+ return this.append(opts);
194
+ }
195
+ }
196
+ // Prepend new section above the first section
197
+ let sectionLineFound = false;
198
+ let processedLines = 0;
199
+ for (const param in opts) {
200
+ processedLines += 1;
201
+ const value = opts[param];
202
+ const line = {
203
+ type: LineType.DIRECTIVE,
204
+ param,
205
+ separator: ' ',
206
+ value,
207
+ before: '',
208
+ after: '\n',
209
+ };
210
+ if (RE_SECTION_DIRECTIVE.test(param)) {
211
+ line.before = indent.replace(/ |\t/, '');
212
+ config.splice(i, 0, line);
213
+ config = line.config = new SSHConfig();
214
+ sectionLineFound = true;
215
+ continue;
216
+ }
217
+ // separate from previous sections with an extra newline
218
+ if (processedLines === Object.keys(opts).length) {
219
+ line.after += '\n';
220
+ }
221
+ if (!sectionLineFound) {
222
+ config.splice(i, 0, line);
223
+ i += 1;
224
+ // Add an extra newline if a single line directive like Include
225
+ if (RE_SINGLE_LINE_DIRECTIVE.test(param)) {
226
+ line.after += '\n';
227
+ }
228
+ continue;
229
+ }
230
+ line.before = indent;
231
+ config.push(line);
232
+ }
233
+ return config;
234
+ }
235
+ }
236
+ SSHConfig.DIRECTIVE = LineType.DIRECTIVE;
237
+ SSHConfig.COMMENT = LineType.COMMENT;
238
+ /**
239
+ * Parse ssh config text into structured object.
240
+ */
241
+ function parse(text) {
242
+ let i = 0;
243
+ let chr = next();
244
+ let config = new SSHConfig();
245
+ let configWas = config;
246
+ function next() {
247
+ return text[i++];
248
+ }
249
+ function space() {
250
+ let spaces = '';
251
+ while (RE_SPACE.test(chr)) {
252
+ spaces += chr;
253
+ chr = next();
254
+ }
255
+ return spaces;
256
+ }
257
+ function linebreak() {
258
+ let breaks = '';
259
+ while (RE_LINE_BREAK.test(chr)) {
260
+ breaks += chr;
261
+ chr = next();
262
+ }
263
+ return breaks;
264
+ }
265
+ function parameter() {
266
+ let param = '';
267
+ while (chr && /[^ \t=]/.test(chr)) {
268
+ param += chr;
269
+ chr = next();
270
+ }
271
+ return param;
272
+ }
273
+ function separator() {
274
+ let sep = space();
275
+ if (chr === '=') {
276
+ sep += chr;
277
+ chr = next();
278
+ }
279
+ return (sep + space());
280
+ }
281
+ function value() {
282
+ let val = '';
283
+ let quoted = false;
284
+ let escaped = false;
285
+ while (chr && !RE_LINE_BREAK.test(chr)) {
286
+ // backslash escapes only double quotes
287
+ if (escaped) {
288
+ val += chr === '"' ? chr : `\\${chr}`;
289
+ escaped = false;
290
+ }
291
+ // ProxyCommand ssh -W "%h:%p" firewall.example.org
292
+ else if (chr === '"' && (!val || quoted)) {
293
+ quoted = !quoted;
294
+ }
295
+ else if (chr === '\\') {
296
+ escaped = true;
297
+ }
298
+ else {
299
+ val += chr;
300
+ }
301
+ chr = next();
302
+ }
303
+ if (quoted || escaped) {
304
+ throw new Error(`Unexpected line break at ${val}`);
305
+ }
306
+ return val.trim();
307
+ }
308
+ function comment() {
309
+ const type = LineType.COMMENT;
310
+ let content = '';
311
+ while (chr && !RE_LINE_BREAK.test(chr)) {
312
+ content += chr;
313
+ chr = next();
314
+ }
315
+ return { type, content, before: '', after: '' };
316
+ }
317
+ // Host *.co.uk
318
+ // Host * !local.dev
319
+ // Host "foo bar"
320
+ function values() {
321
+ const results = [];
322
+ let val = '';
323
+ let quoted = false;
324
+ let escaped = false;
325
+ while (chr && !RE_LINE_BREAK.test(chr)) {
326
+ if (escaped) {
327
+ val += chr === '"' ? chr : `\\${chr}`;
328
+ escaped = false;
329
+ }
330
+ else if (chr === '"') {
331
+ quoted = !quoted;
332
+ }
333
+ else if (chr === '\\') {
334
+ escaped = true;
335
+ }
336
+ else if (quoted) {
337
+ val += chr;
338
+ }
339
+ else if (/[ \t]/.test(chr)) {
340
+ if (val) {
341
+ results.push(val);
342
+ val = '';
343
+ }
344
+ // otherwise ignore the space
345
+ }
346
+ else {
347
+ val += chr;
348
+ }
349
+ chr = next();
350
+ }
351
+ if (quoted || escaped) {
352
+ throw new Error(`Unexpected line break at ${results.concat(val).join(' ')}`);
353
+ }
354
+ if (val)
355
+ results.push(val);
356
+ return results.length > 1 ? results : results[0];
357
+ }
358
+ function directive() {
359
+ const type = LineType.DIRECTIVE;
360
+ const param = parameter();
361
+ // Host "foo bar" baz
362
+ const multiple = RE_MULTI_VALUE_DIRECTIVE.test(param);
363
+ const result = {
364
+ type,
365
+ param,
366
+ separator: separator(),
367
+ quoted: !multiple && chr === '"',
368
+ value: multiple ? values() : value(),
369
+ before: '',
370
+ after: '',
371
+ };
372
+ if (!result.quoted)
373
+ delete result.quoted;
374
+ if (/^Match$/i.test(param)) {
375
+ const criteria = {};
376
+ for (let i = 0; i < result.value.length; i += 2) {
377
+ const keyword = result.value[i];
378
+ const value = result.value[i + 1];
379
+ criteria[keyword] = value;
380
+ }
381
+ result.criteria = criteria;
382
+ }
383
+ return result;
384
+ }
385
+ function line() {
386
+ const before = space();
387
+ const node = chr === '#' ? comment() : directive();
388
+ const after = linebreak();
389
+ node.before = before;
390
+ node.after = after;
391
+ return node;
392
+ }
393
+ while (chr) {
394
+ let node = line();
395
+ if (node.type === LineType.DIRECTIVE && RE_SECTION_DIRECTIVE.test(node.param)) {
396
+ config = configWas;
397
+ config.push(node);
398
+ config = node.config = new SSHConfig();
399
+ }
400
+ else if (node.type === LineType.DIRECTIVE && !node.param) {
401
+ // blank lines at file end
402
+ config[config.length - 1].after += node.before;
403
+ }
404
+ else {
405
+ config.push(node);
406
+ }
407
+ }
408
+ return configWas;
409
+ }
410
+ exports.parse = parse;
411
+ /**
412
+ * Stringify structured object into ssh config text
413
+ */
414
+ function stringify(config) {
415
+ let str = '';
416
+ function formatValue(value, quoted) {
417
+ if (value && typeof value === 'object' && !Array.isArray(value)) {
418
+ const result = [];
419
+ for (const key in value)
420
+ result.push(key, value[key]);
421
+ value = result;
422
+ }
423
+ if (Array.isArray(value)) {
424
+ return value.map(chunk => formatValue(chunk, RE_SPACE.test(chunk))).join(' ');
425
+ }
426
+ return quoted ? `"${value}"` : value;
427
+ }
428
+ function formatDirective(line) {
429
+ const quoted = line.quoted
430
+ || (RE_QUOTE_DIRECTIVE.test(line.param) && RE_SPACE.test(line.value));
431
+ const value = formatValue(line.value, quoted);
432
+ return `${line.param}${line.separator}${value}`;
433
+ }
434
+ const format = line => {
435
+ str += line.before;
436
+ if (line.type === LineType.COMMENT) {
437
+ str += line.content;
438
+ }
439
+ else if (line.type === LineType.DIRECTIVE && MULTIPLE_VALUE_PROPS.includes(line.param)) {
440
+ [].concat(line.value).forEach(function (value, i, values) {
441
+ str += formatDirective({ ...line, value });
442
+ if (i < values.length - 1)
443
+ str += `\n${line.before}`;
444
+ });
445
+ }
446
+ else if (line.type === LineType.DIRECTIVE) {
447
+ str += formatDirective(line);
448
+ }
449
+ str += line.after;
450
+ if (line.config) {
451
+ line.config.forEach(format);
452
+ }
453
+ };
454
+ config.forEach(format);
455
+ return str;
456
+ }
457
+ exports.stringify = stringify;
458
+ exports.default = Object.assign(SSHConfig, { parse, stringify });
459
+ //# sourceMappingURL=ssh-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ssh-config.js","sourceRoot":"","sources":["ssh-config.ts"],"names":[],"mappings":"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"}