diff --git a/terminus-ssh/src/api.ts b/terminus-ssh/src/api.ts index ef3435de..0721d65e 100644 --- a/terminus-ssh/src/api.ts +++ b/terminus-ssh/src/api.ts @@ -4,6 +4,7 @@ export interface LoginScript { expect?: string send: string isRegex?: boolean + optional?: boolean } export interface SSHConnection { @@ -38,26 +39,36 @@ export class SSHSession extends BaseSession { if (this.scripts) { let found = false for (let script of this.scripts) { + let match = false + let cmd = "" if (script.isRegex) { - let re = new RegExp(script.expect, "g"); - + let re = new RegExp(script.expect, "g") if (dataString.match(re)) { - let cmd = dataString.replace(re, script.send); - console.log('Executing script:', cmd) - this.shell.write(cmd + '\n') - this.scripts = this.scripts.filter(x => x !== script) + cmd = dataString.replace(re, script.send) + match = true found = true - } else { - break; } } else { if (dataString.includes(script.expect)) { - console.log('Executing script:', script.send) - this.shell.write(script.send + '\n') - this.scripts = this.scripts.filter(x => x !== script) + cmd = script.send + match = true found = true - } else { + } + } + + if (match) { + console.log('Executing script: "' + cmd + '"') + this.shell.write(cmd + '\n') + this.scripts = this.scripts.filter(x => x !== script) + } + else { + if (script.optional) { + console.log("Skip optional script: " + script.expect) + found = true + this.scripts = this.scripts.filter(x => x !== script) + } + else { break } } diff --git a/terminus-ssh/src/components/editConnectionModal.component.pug b/terminus-ssh/src/components/editConnectionModal.component.pug index 67c038c1..e2b7ce73 100644 --- a/terminus-ssh/src/components/editConnectionModal.component.pug +++ b/terminus-ssh/src/components/editConnectionModal.component.pug @@ -95,6 +95,7 @@ th String to expect th String to be sent th Regex + th Optional th Actions tr(*ngFor='let script of connection.scripts') td @@ -111,6 +112,10 @@ toggle( [(ngModel)]='script.isRegex', ) + td + toggle( + [(ngModel)]='script.optional', + ) td .input-group.flex-nowrap button.btn.btn-outline-info.ml-0((click)='moveScriptUp(script)') @@ -136,6 +141,10 @@ toggle( [(ngModel)]='newScript.isRegex', ) + td + toggle( + [(ngModel)]='newScript.optional', + ) td .input-group.flex-nowrap button.btn.btn-outline-info.ml-0((click)='addScript()') diff --git a/terminus-ssh/src/components/editConnectionModal.component.ts b/terminus-ssh/src/components/editConnectionModal.component.ts index f67a01ff..560b91f5 100644 --- a/terminus-ssh/src/components/editConnectionModal.component.ts +++ b/terminus-ssh/src/components/editConnectionModal.component.ts @@ -83,5 +83,7 @@ export class EditConnectionModalComponent { clearScript () { this.newScript.expect = '' this.newScript.send = '' + this.newScript.isRegex = false + this.newScript.optional = false } }