diff --git a/terminus-ssh/src/api.ts b/terminus-ssh/src/api.ts index df8e53be..f2650340 100644 --- a/terminus-ssh/src/api.ts +++ b/terminus-ssh/src/api.ts @@ -3,6 +3,8 @@ import { BaseSession } from 'terminus-terminal' export interface LoginScript { expect?: string send: string + isRegex?: boolean + optional?: boolean } export interface SSHConnection { @@ -37,13 +39,35 @@ export class SSHSession extends BaseSession { if (this.scripts) { let found = false for (let script of this.scripts) { - 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) - found = true + let match = false + let cmd = '' + if (script.isRegex) { + let re = new RegExp(script.expect, 'g') + if (dataString.match(re)) { + cmd = dataString.replace(re, script.send) + match = true + found = true + } } else { - break + if (dataString.includes(script.expect)) { + cmd = script.send + match = true + found = true + } + } + + 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 50a01663..e2b7ce73 100644 --- a/terminus-ssh/src/components/editConnectionModal.component.pug +++ b/terminus-ssh/src/components/editConnectionModal.component.pug @@ -94,18 +94,28 @@ tr th String to expect th String to be sent + th Regex + th Optional th Actions tr(*ngFor='let script of connection.scripts') td input.form-control( - type='text', - [(ngModel)]='script.expect' - ) + type='text', + [(ngModel)]='script.expect' + ) td input.form-control( - type='text', - [(ngModel)]='script.send' - ) + type='text', + [(ngModel)]='script.send' + ) + td + toggle( + [(ngModel)]='script.isRegex', + ) + td + toggle( + [(ngModel)]='script.optional', + ) td .input-group.flex-nowrap button.btn.btn-outline-info.ml-0((click)='moveScriptUp(script)') @@ -127,6 +137,14 @@ placeholder='Enter a string to be sent', [(ngModel)]='newScript.send' ) + td + 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 } }