import * as EventModels from '@lenovo-software/lsa-clients-common/dist/models/eventModels'; import { Logger } from '../common/logger'; import { extensionComm } from './extensionComm'; export class Executor { private logger = Logger.getInstance(); constructor() {} public execute(data: EventModels.RemoteExecuteEventModel): void { try { if (data.path && data.path.length > 0 && this.isValidUrl(data.path)) { let teacher = '-unknown-'; if (data.hasOwnProperty('teacherInfo') && !!data.teacherInfo) { teacher = data.teacherInfo?.username; } this.openBrowser(data.path, teacher); } else { throw new Error('Executor.execute(): Invalid url:' + data.path); } } catch (err) { this.logger.logError('onRemoteExecute exception: ' + err); } } private async openBrowser(url: string, teacherName: string) { this.logger.logMessage("temp: Requesting webHelper to open url: '" + url + "' from teacher: " + teacherName); await extensionComm.sendToWebHelper( { message: 'RunURL', value: { url: url, teacher: teacherName, newTab: true } }, (response: any) => { //if for some reason the extension can be contacted but can't open a tab. seems like this could never happen if (response && response.message && response.message === 'no_tab') { this.logger.logMessage('Received response from web helper: ' + response.message); this.openBrowserWindow(url); } } ); } private openBrowserWindow(url: string): void { window.open(url); } private isValidUrl(path: string): boolean { let url; try { url = new URL(path); } catch (e) { return false; } return url.protocol.match(/https?:/) ? true : false; } }