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);
                }
        }
Esempio n. 4
0
        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;
        }
Esempio n. 6
0
        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);
        }
Esempio n. 7
0
        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);
        }
Esempio n. 8
0
        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);
        }
Esempio n. 9
0
        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);
        }
Esempio n. 10
0
        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);
        }
Esempio n. 11
0
        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);
                }
        }
Esempio n. 13
0
 static void Main(string[] args)
 {
     RemoteDesktopService.SetAllowTSConnection("User", "Pass", "Domain", "Server", true);
 }