private async Task <IRemoteDesktopSession> Connect( RdpTunnel tunnel, InstanceLocator vmInstanceReference) { using (var gceAdapter = new ComputeEngineAdapter(this.serviceProvider.GetService <IAuthorizationAdapter>())) { var credentials = await gceAdapter.ResetWindowsUserAsync( vmInstanceReference, CreateRandomUsername(), CancellationToken.None); var rdpService = new RemoteDesktopService(this.serviceProvider); return(rdpService.Connect( vmInstanceReference, "localhost", (ushort)tunnel.LocalPort, new VmInstanceConnectionSettings() { Username = credentials.UserName, Password = credentials.SecurePassword, AuthenticationLevel = RdpAuthenticationLevel.NoServerAuthentication, BitmapPersistence = RdpBitmapPersistence.Disabled, DesktopSize = RdpDesktopSize.ClientSize })); } }
public async Task WhenCredentialsInvalid_ThenErrorIsShownAndWindowIsClosed( [WindowsInstance] InstanceRequest testInstance) { await testInstance.AwaitReady(); using (var tunnel = RdpTunnel.Create(testInstance.InstanceReference)) { var rdpService = new RemoteDesktopService(this.serviceProvider); var session = rdpService.Connect( testInstance.InstanceReference, "localhost", (ushort)tunnel.LocalPort, new VmInstanceSettings() { Username = "******", Password = SecureStringExtensions.FromClearText("wrong"), AuthenticationLevel = RdpAuthenticationLevel.NoServerAuthentication, UserAuthenticationBehavior = RdpUserAuthenticationBehavior.AbortOnFailure }); AwaitEvent <RemoteDesktopConnectionFailedEvent>(); Assert.IsNotNull(this.ExceptionShown); Assert.IsInstanceOf(typeof(RdpDisconnectedException), this.ExceptionShown); Assert.AreEqual(2055, ((RdpDisconnectedException)this.ExceptionShown).DisconnectReason); } }
public async Task WhenCredentialsValid_ThenConnectingSucceeds( [Values(RdpConnectionBarState.AutoHide, RdpConnectionBarState.Off, RdpConnectionBarState.Pinned)] RdpConnectionBarState connectionBarState, [Values(RdpDesktopSize.ClientSize, RdpDesktopSize.ScreenSize)] RdpDesktopSize desktopSize, [Values(RdpAudioMode.DoNotPlay, RdpAudioMode.PlayLocally, RdpAudioMode.PlayOnServer)] RdpAudioMode audioMode, [Values(RdpRedirectClipboard.Disabled, RdpRedirectClipboard.Enabled)] RdpRedirectClipboard redirectClipboard, // Use a slightly larger machine type as all this RDP'ing consumes a fair // amount of memory. [WindowsInstance(MachineType = "n1-standard-2")] InstanceRequest testInstance) { await testInstance.AwaitReady(); using (var tunnel = RdpTunnel.Create(testInstance.InstanceReference)) using (var gceAdapter = new ComputeEngineAdapter(this.serviceProvider.GetService <IAuthorizationService>())) { var credentials = await gceAdapter.ResetWindowsUserAsync( testInstance.InstanceReference, "test", CancellationToken.None); var rdpService = new RemoteDesktopService(this.serviceProvider); var session = rdpService.Connect( testInstance.InstanceReference, "localhost", (ushort)tunnel.LocalPort, new VmInstanceSettings() { Username = credentials.UserName, Password = credentials.SecurePassword, ConnectionBar = connectionBarState, DesktopSize = desktopSize, AudioMode = audioMode, RedirectClipboard = redirectClipboard, AuthenticationLevel = RdpAuthenticationLevel.NoServerAuthentication, BitmapPersistence = RdpBitmapPersistence.Disabled }); AwaitEvent <RemoteDesktopConnectionSuceededEvent>(); Assert.IsNull(this.ExceptionShown); RemoteDesktopWindowClosedEvent expectedEvent = null; this.serviceProvider.GetService <IEventService>() .BindHandler <RemoteDesktopWindowClosedEvent>(e => { expectedEvent = e; }); session.Close(); Assert.IsNotNull(expectedEvent); } }
public async Task WhenCredentialsInvalid_ThenErrorIsShownAndWindowIsClosed( [WindowsInstance] ResourceTask <InstanceLocator> testInstance, [Credential(Role = PredefinedRole.IapTunnelUser)] ResourceTask <ICredential> credential) { var locator = await testInstance; using (var tunnel = RdpTunnel.Create( locator, await credential)) { var rdpService = new RemoteDesktopService(this.serviceProvider); var session = rdpService.Connect( locator, "localhost", (ushort)tunnel.LocalPort, new VmInstanceConnectionSettings() { Username = "******", Password = SecureStringExtensions.FromClearText("wrong"), AuthenticationLevel = RdpAuthenticationLevel.NoServerAuthentication, UserAuthenticationBehavior = RdpUserAuthenticationBehavior.AbortOnFailure, DesktopSize = RdpDesktopSize.ClientSize }); AwaitEvent <RemoteDesktopConnectionFailedEvent>(); Assert.IsNotNull(this.ExceptionShown); Assert.IsInstanceOf(typeof(RdpDisconnectedException), this.ExceptionShown); Assert.AreEqual(2055, ((RdpDisconnectedException)this.ExceptionShown).DisconnectReason); } }
public DebugWindow(IServiceProvider serviceProvider) { InitializeComponent(); this.jobService = serviceProvider.GetService <IJobService>(); this.eventService = serviceProvider.GetService <IEventService>(); this.rdpService = serviceProvider.GetService <RemoteDesktopService>(); this.TabText = this.Text; this.eventService.BindHandler <StatusUpdatedEvent>( e => { this.label.Text = e.Status; }); this.eventService.BindAsyncHandler <StatusUpdatedEvent>( async e => { await Task.Delay(10); Debug.WriteLine("Delayed in event handler"); }); this.dockPanel = serviceProvider.GetService <IMainForm>().MainPanel; this.serviceProvider = serviceProvider; }
public ProjectExplorerWindow(IServiceProvider serviceProvider) { InitializeComponent(); this.dockPanel = serviceProvider.GetService <IMainForm>().MainPanel; this.serviceProvider = serviceProvider; this.TabText = this.Text; // // This window is a singleton, so we never want it to be closed, // just hidden. // this.HideOnClose = true; this.vsToolStripExtender.SetStyle( this.toolStrip, VisualStudioToolStripExtender.VsVersion.Vs2015, this.vs2015LightTheme); this.treeView.Nodes.Add(this.rootNode); this.mainForm = serviceProvider.GetService <IMainForm>(); this.eventService = serviceProvider.GetService <IEventService>(); this.jobService = serviceProvider.GetService <IJobService>(); this.projectInventoryService = serviceProvider.GetService <ProjectInventoryService>(); this.settingsRepository = serviceProvider.GetService <InventorySettingsRepository>(); this.authService = serviceProvider.GetService <IAuthorizationService>(); this.remoteDesktopService = serviceProvider.GetService <RemoteDesktopService>(); this.eventService.BindAsyncHandler <ProjectInventoryService.ProjectAddedEvent>(OnProjectAdded); this.eventService.BindHandler <ProjectInventoryService.ProjectDeletedEvent>(OnProjectDeleted); this.eventService.BindHandler <RemoteDesktopConnectionSuceededEvent>(OnRdpConnectionSucceeded); this.eventService.BindHandler <RemoteDesktopWindowClosedEvent>(OnRdpConnectionClosed); }
public void Execute(IActivityRequest request, IActivityResponse response) { string targetServer = request.Inputs["Server Name"].AsString(); bool targetSetting = request.Inputs["Allow Remote Desktop Connection"].AsBoolean(); string actionResult = RemoteDesktopService.SetAllowTSConnection(connectionSettings.UserName, connectionSettings.Password, connectionSettings.Domain, targetServer, targetSetting); response.Publish("Action Result", actionResult); }
public void WhenWrongPort_ThenErrorIsShownAndWindowIsClosed() { var rdpService = new RemoteDesktopService(this.serviceProvider); rdpService.Connect( this.instanceReference, "localhost", 135, // That one will be listening, but it is RPC, not RDP. new VmInstanceConnectionSettings()); AwaitEvent <RemoteDesktopConnectionFailedEvent>(); Assert.IsInstanceOf(typeof(RdpDisconnectedException), this.ExceptionShown); Assert.AreEqual(2308, ((RdpDisconnectedException)this.ExceptionShown).DisconnectReason); }
public void WhenServerInvalid_ThenErrorIsShownAndWindowIsClosed() { var rdpService = new RemoteDesktopService(this.serviceProvider); rdpService.Connect( this.instanceReference, "invalid.corp", 3389, new VmInstanceConnectionSettings()); AwaitEvent <RemoteDesktopConnectionFailedEvent>(); Assert.IsInstanceOf(typeof(RdpDisconnectedException), this.ExceptionShown); Assert.AreEqual(260, ((RdpDisconnectedException)this.ExceptionShown).DisconnectReason); }
public void WhenPortNotListening_ThenErrorIsShownAndWindowIsClosed() { var rdpService = new RemoteDesktopService(this.serviceProvider); rdpService.Connect( this.instanceReference, "localhost", 1, new VmInstanceSettings()); AwaitEvent <RemoteDesktopConnectionFailedEvent>(); Assert.IsInstanceOf(typeof(RdpDisconnectedException), this.ExceptionShown); Assert.AreEqual(516, ((RdpDisconnectedException)this.ExceptionShown).DisconnectReason); }
public async Task WhenSigningOutPerSendKeys_ThenWindowIsClosed( [WindowsInstance(ImageFamily = WindowsInstanceAttribute.WindowsServer2019)] ResourceTask <InstanceLocator> testInstance, [Credential(Role = PredefinedRole.IapTunnelUser)] ResourceTask <ICredential> credential) { var locator = await testInstance; using (var tunnel = RdpTunnel.Create( locator, await credential)) using (var gceAdapter = new ComputeEngineAdapter(this.serviceProvider.GetService <IAuthorizationAdapter>())) { var credentials = await gceAdapter.ResetWindowsUserAsync( locator, CreateRandomUsername(), CancellationToken.None); var rdpService = new RemoteDesktopService(this.serviceProvider); var session = (RemoteDesktopPane)rdpService.Connect( locator, "localhost", (ushort)tunnel.LocalPort, new VmInstanceConnectionSettings() { Username = credentials.UserName, Password = credentials.SecurePassword, AuthenticationLevel = RdpAuthenticationLevel.NoServerAuthentication, BitmapPersistence = RdpBitmapPersistence.Disabled, DesktopSize = RdpDesktopSize.ClientSize }); AwaitEvent <RemoteDesktopConnectionSuceededEvent>(); Thread.Sleep(5000); session.ShowSecurityScreen(); Thread.Sleep(1000); session.SendKeys(Keys.Menu, Keys.S); // Sign out. AwaitEvent <RemoteDesktopWindowClosedEvent>(); Assert.IsNull(this.ExceptionShown); } }
public async Task WhenSigningOutPerSendKeys_ThenWindowIsClosed( [WindowsInstance(ImageFamily = WindowsInstanceAttribute.WindowsServer2019)] InstanceRequest testInstance) { await testInstance.AwaitReady(); using (var tunnel = RdpTunnel.Create(testInstance.InstanceReference)) using (var gceAdapter = new ComputeEngineAdapter(this.serviceProvider.GetService <IAuthorizationService>())) { var credentials = await gceAdapter.ResetWindowsUserAsync( testInstance.InstanceReference, "test", CancellationToken.None); var rdpService = new RemoteDesktopService(this.serviceProvider); var session = (RemoteDesktopPane)rdpService.Connect( testInstance.InstanceReference, "localhost", (ushort)tunnel.LocalPort, new VmInstanceSettings() { Username = credentials.UserName, Password = credentials.SecurePassword, AuthenticationLevel = RdpAuthenticationLevel.NoServerAuthentication, BitmapPersistence = RdpBitmapPersistence.Disabled }); AwaitEvent <RemoteDesktopConnectionSuceededEvent>(); Thread.Sleep(5000); session.ShowSecurityScreen(); Thread.Sleep(1000); session.SendKeys(Keys.Menu, Keys.S); // Sign out. AwaitEvent <RemoteDesktopWindowClosedEvent>(); Assert.IsNull(this.ExceptionShown); } }
static void Main(string[] args) { RemoteDesktopService.SetAllowTSConnection("User", "Pass", "Domain", "Server", true); }