protected override async Task <Action <NativeActivityContext> > ExecuteAsync(NativeActivityContext context, CancellationToken cancellationToken) { // Inputs var activityTimeout = TimeoutMS.Get(context); var host = Host.Get(context); var port = Port.Get(context); var username = Username.Get(context); var password = Password.Get(context); var shellExpectedPrompt = ShellExpectedPrompt.Get(context); var proxyHost = ProxyHost.Get(context); var proxyPort = ProxyPort.Get(context); var proxyUsername = ProxyUsername.Get(context); var proxyPassword = ProxyPassword.Get(context); // Set a timeout on the execution var task = ExecuteWithTimeout(context, cancellationToken); if (await Task.WhenAny(task, Task.Delay(activityTimeout, cancellationToken)) != task) { throw new TimeoutException(Resources.Timeout_Error); } if (task.Exception != null) { throw task.Exception; } _objectContainer.Add(sshClient); _objectContainer.Add(currentShellStream); _objectContainer.Add(expectedPromptRegex); return((ctx) => { // Schedule child activities if (Body != null) { ctx.ScheduleAction <IObjectContainer>(Body, _objectContainer, OnCompleted, OnFaulted); } }); }
private async Task ExecuteWithTimeout(NativeActivityContext context, CancellationToken cancellationToken = default) { var sshPassword = new NetworkCredential("", Password.Get(context)).Password; var proxyPassword = new NetworkCredential("", ProxyPassword.Get(context)).Password; var sshTimeout = TimeSpan.FromMilliseconds(SSHTimeoutMS.Get(context)); ConnectionInfo connectionInfo; if (!string.IsNullOrEmpty(ProxyHost.Get(context))) // Proxy defined { if (!string.IsNullOrEmpty(ProxyUsername.Get(context))) // Proxy authentication { connectionInfo = new PasswordConnectionInfo(Host.Get(context), Port.Get(context), Username.Get(context), Encoding.UTF8.GetBytes(sshPassword), ProxyTypes.Http, ProxyHost.Get(context), ProxyPort.Get(context), ProxyUsername.Get(context), proxyPassword); } else // No proxy authentication { connectionInfo = new PasswordConnectionInfo(Host.Get(context), Port.Get(context), Username.Get(context), sshPassword, ProxyTypes.Http, ProxyHost.Get(context), ProxyPort.Get(context)); } } else // No Proxy defined { connectionInfo = new PasswordConnectionInfo(Host.Get(context), Port.Get(context), Username.Get(context), sshPassword); } connectionInfo.Timeout = sshTimeout; sshClient = new SshClient(connectionInfo); sshClient.Connect(); if (ShellExpectedPrompt.Expression != null) { var terminalMode = new Dictionary <TerminalModes, uint> { { TerminalModes.ECHO, 53 } }; expectedPromptRegex = new Regex(ShellExpectedPrompt.Get(context), RegexOptions.Compiled); currentShellStream = sshClient.CreateShellStream("UiPathTeam.SSHConnector.Shell", 0, 0, 0, 0, 4096, terminalMode); var welcomeMessage = SSHHelpers.Expect(currentShellStream, expectedPromptRegex, string.Empty, sshTimeout); ShellWelcomeMessage.Set(context, welcomeMessage); } }
protected override void Execute(NativeActivityContext context) { if (!string.IsNullOrEmpty(ProxyHost.Get(context))) // Proxy defined { if (!string.IsNullOrEmpty(ProxyUsername.Get(context))) // Proxy authentication { connectionInfo = new PasswordConnectionInfo(Host.Get(context), Port.Get(context), Username.Get(context), Encoding.UTF8.GetBytes(Password.Get(context)), ProxyTypes.Http, ProxyHost.Get(context), ProxyPort.Get(context), ProxyUsername.Get(context), ProxyPassword.Get(context)); } else // No proxy authentication { connectionInfo = new PasswordConnectionInfo(Host.Get(context), Port.Get(context), Username.Get(context), Password.Get(context), ProxyTypes.Http, ProxyHost.Get(context), ProxyPort.Get(context)); } } else // No Proxy defined { connectionInfo = new PasswordConnectionInfo(Host.Get(context), Port.Get(context), Username.Get(context), Password.Get(context)); } sshClient = new SshClient(connectionInfo); sshClient.Connect(); if (Body != null) { //scheduling the execution of the child activities // and passing the value of the delegate argument context.ScheduleAction(Body, sshClient, OnCompleted, OnFaulted); } }