Example #1
0
        private UsbStorageGuard InstallUsbStorageGuard(IBeamgunSettings beamgunSettings)
        {
            var usbGuard = new UsbStorageGuard(beamgunSettings);

            BeamgunState.UsbMassStorageDisabled = usbGuard.UsbStorageDisabled;
            BeamgunState.PropertyChanged       += (sender, args) =>
            {
                if (args.PropertyName != nameof(BeamgunState.UsbMassStorageDisabled))
                {
                    return;
                }
                if (!beamgunSettings.IsAdmin)
                {
                    BeamgunState.AppendToAlert("Cannot change USB Mass Storage settings without administrative privileges.");
                }
                try
                {
                    usbGuard.UsbStorageDisabled = BeamgunState.UsbMassStorageDisabled;
                }
                catch (PrivilegeNotHeldException e)
                {
                    BeamgunState.AppendToAlert($"Privileges exception: {e.Message}");
                }
            };
            return(usbGuard);
        }
Example #2
0
        public KeyboardWatcher(IBeamgunSettings settings, WorkstationLocker locker, Action <string> report, Action <string> alarm)
        {
            var keyboardQuery = new WqlEventQuery("__InstanceCreationEvent", new TimeSpan(0, 0, 1), "TargetInstance isa \"Win32_Keyboard\"");

            _watcher = new ManagementEventWatcher(keyboardQuery);
            _watcher.EventArrived += (caller, args) =>
            {
                var obj = (ManagementBaseObject)args.NewEvent["TargetInstance"];
                alarm($"Alerting on keyboard insertion: " +
                      $"{obj["Name"]} " +
                      $"{obj["Caption"]} " +
                      $"{obj["Description"]} " +
                      $"{obj["DeviceID"]} " +
                      $"{obj["Layout"]} " +
                      $"{obj["PNPDeviceID"]}.");
                if (!settings.LockWorkstation)
                {
                    return;
                }
                report(locker.Lock()
                    ? "Successfully locked the workstation."
                    : "Could not lock the workstation.");
            };
            _watcher.Start();
        }
Example #3
0
        public NetworkWatcher(IBeamgunSettings settings, NetworkAdapterDisabler networkAdapterDisabler,
                              Action <string> report, Action <string> alarm)
        {
            var networkQuery = new WqlEventQuery("__InstanceCreationEvent", new TimeSpan(0, 0, 1), "TargetInstance isa \"Win32_NetworkAdapter\"");

            _watcher = new ManagementEventWatcher(networkQuery);
            _watcher.EventArrived += (caller, args) =>
            {
                var obj          = (ManagementBaseObject)args.NewEvent["TargetInstance"];
                var alertMessage = $"Alerting on network adapter insertion: {obj["Description"]} (Device ID {obj["DeviceID"]}) ";
                alarm(alertMessage);
                Triggered = settings.DisableNetworkAdapter;
                if (Triggered)
                {
                    report($"Disabling {obj["Description"]} every {settings.DisableNetworkAdapterInterval} ms until Reset.");
                }
                while (Triggered)
                {
                    try
                    {
                        if (!networkAdapterDisabler.Disable(obj["DeviceID"].ToString()))
                        {
                            report($"DANGER: Unable to disable {obj["AdapterType"]}!");
                        }
                        Thread.Sleep((int)settings.DisableNetworkAdapterInterval);
                    }
                    catch (NetworkAdapterDisablerException e)
                    {
                        report(e.Message);
                    }
                }
            };
            _watcher.Start();
        }
Example #4
0
 public void Update(IBeamgunSettings settings)
 {
     if (!settings.CheckForUpdates)
     {
         return;
     }
     using (var client = new WebClient())
     {
         var url         = settings.VersionUrl + "?id=" + settings.BeamgunId + "&ver=" + Assembly.GetExecutingAssembly().GetName().Version;
         var requestTask = client.DownloadStringTaskAsync(url);
         requestTask.ContinueWith(x =>
         {
             try
             {
                 var versionJson        = JObject.Parse(x.Result);
                 settings.LatestVersion = new Version(versionJson["latest_version"].ToString());
                 settings.DownloadUrl   = versionJson["download_url"].ToString();
                 settings.VersionUrl    = versionJson["update_version_url"].ToString();
             }
             catch (Exception e)
             {
                 Debug.WriteLine($"Unable to retrieve version information: {e.Message}");
             }
         });
     }
 }
Example #5
0
        public MouseWatcher(IBeamgunSettings settings, WorkstationLocker locker, Action <string> report, Action <string> alarm, Func <bool> disabled)
        {
            var MouseQuery = new WqlEventQuery("__InstanceCreationEvent", new TimeSpan(0, 0, 1), "TargetInstance isa \"Win32_PointingDevice\"");

            _watcher = new ManagementEventWatcher(MouseQuery);
            _watcher.EventArrived += (caller, args) =>
            {
                if (disabled())
                {
                    return;
                }
                var obj = (ManagementBaseObject)args.NewEvent["TargetInstance"];
                alarm($"Alerting on mouse insertion: " +
                      $"{obj["Name"]} " +
                      $"{obj["Caption"]} " +
                      $"{obj["Description"]} " +
                      $"{obj["DeviceID"]} " +
                      $"{obj["Manufacturer"]} " +
                      $"{obj["PNPDeviceID"]}.");
                if (!settings.LockOnMouse)
                {
                    return;
                }
                report(locker.Lock()
                    ? "Successfully locked the workstation."
                    : "Could not lock the workstation.");
            };
            _watcher.Start();
        }
Example #6
0
        public void Update(IBeamgunSettings settings)
        {
            if (!settings.CheckForUpdates)
            {
                return;
            }
            JObject versionJson;

            using (var client = new WebClient())
            {
                var url = settings.VersionUrl + "?id=" + settings.BeamgunId + "&ver=" + Assembly.GetExecutingAssembly().GetName().Version;
                using (var data = client.OpenRead(Uri.EscapeUriString(url)))
                {
                    if (data == null)
                    {
                        throw new Exception("Could not connect to update server.");
                    }
                    using (var reader = new StreamReader(data))
                    {
                        versionJson = JObject.Parse(reader.ReadToEnd());
                    }
                }
            }
            try
            {
                settings.LatestVersion = new Version(versionJson["latest_version"].ToString());
                settings.DownloadUrl   = versionJson["download_url"].ToString();
                settings.VersionUrl    = versionJson["update_version_url"].ToString();
            }
            catch (Exception e)
            {
                throw new Exception("Could not parse update results from server.", e);
            }
        }
Example #7
0
        public KeyboardWatcher(IBeamgunSettings settings, WorkstationLocker locker, Action <string> report, Action <string> alarm, Func <bool> disabled)
        {
            var keyboardQuery = new WqlEventQuery("__InstanceCreationEvent", new TimeSpan(0, 0, 1), "TargetInstance isa \"Win32_Keyboard\"");

            _watcher = new ManagementEventWatcher(keyboardQuery);
            _watcher.EventArrived += (caller, args) =>
            {
                if (disabled())
                {
                    return;
                }
                var obj = (ManagementBaseObject)args.NewEvent["TargetInstance"];
                alarm($"Alerting on keyboard insertion: " +
                      $"{obj["Name"]} " +
                      $"{obj["Caption"]} " +
                      $"{obj["Description"]} " +
                      $"{obj["DeviceID"]}" +
                      $"{obj["Layout"]} " +
                      $"{obj["PNPDeviceID"]}.");
                if (!settings.LockOnKeyboard)
                {
                    return;
                }
                if (WhiteList.WhiteListed(obj))
                {
                    report($"Device is whitelisted, remove {obj["PNPDeviceID"]} from {WhiteList.WhiteFilename} if you've changed your mind.");
                    return;
                }
                report(locker.Lock()
                    ? "Successfully locked the workstation."
                    : "Could not lock the workstation.");
            };
            _watcher.Start();
        }
Example #8
0
        private Alarm InstallAlarm(IBeamgunSettings beamgunSettings)
        {
            var alarm = new Alarm(beamgunSettings.StealFocusInterval, BeamgunState);

            alarm.AlarmCallback += () =>
            {
                BeamgunState.MainWindowState      = WindowState.Normal;
                BeamgunState.MainWindowVisibility = Visibility.Visible;
                DoStealFocus();
            };
            return(alarm);
        }
Example #9
0
        public NetworkWatcher(IBeamgunSettings settings, Report report, TripAlarm alarm)
        {
            var networkQuery = new WqlEventQuery("__InstanceCreationEvent", new TimeSpan(0, 0, 1), "TargetInstance isa \"Win32_NetworkAdapter\"");

            _watcher = new ManagementEventWatcher(networkQuery);
            _watcher.EventArrived += (caller, args) =>
            {
                var obj          = (ManagementBaseObject)args.NewEvent["TargetInstance"];
                var alertMessage = $"Alerting on network adapter insertion: " +
                                   $"{obj["AdapterType"]} " +
                                   $"{obj["Caption"]} " +
                                   $"{obj["Description"]} " +
                                   $"{obj["DeviceID"]} " +
                                   $"{obj["GUID"]} " +
                                   $"{obj["MACAddress"]} " +
                                   $"{obj["Manufacturer"]} " +
                                   $"{obj["Name"]} " +
                                   $"{obj["PermanentAddress"]} " +
                                   $"{obj["NetworkAddresses"]} " +
                                   $"{obj["ProductName"]} " +
                                   $"{obj["ServiceName"]} " +
                                   $"{obj["SystemCreationClassName"]} " +
                                   $"{obj["SystemName"]} ";
                alarm(alertMessage);
                if (!settings.DisableNetworkAdapter)
                {
                    return;
                }
                // TODO: Parse out into separate class?
                var query    = $"SELECT * FROM Win32_NetworkAdapter WHERE DeviceID = \"{obj["DeviceID"]}\"";
                var searcher = new ManagementObjectSearcher(query);
                foreach (var item in searcher.Get())
                {
                    var managementObject = (ManagementObject)item;
                    try
                    {
                        var disableCode = (uint)managementObject.InvokeMethod("Disable", null);
                        report(disableCode == 0
                            ? "Network adapter successfully disabled."
                            : $"Danger! Unable to disable network adapter: {disableCode}");
                        return;
                    }
                    catch (ManagementException e)
                    {
                        report($"Error disabling new network adapter: {e}");
                    }
                }
            };
            _watcher.Start();
        }
Example #10
0
 public VersionCheckerTimer(IBeamgunSettings beamgunSettings, VersionChecker checker, Report report)
 {
     _timer = new Timer(state =>
     {
         try
         {
             checker.Update(beamgunSettings);
             var availableVersion = beamgunSettings.LatestVersion;
             var currentVersion   = Assembly.GetExecutingAssembly().GetName().Version;
             report(
                 availableVersion > currentVersion
                     ? $"Version {availableVersion} is available at {beamgunSettings.DownloadUrl}"
                     : $"Beamgun is up to date.");
         }
         catch (Exception e)
         {
             report($"Unable to connect to update server. {e.Message}");
         }
     }, null, 0, beamgunSettings.UpdatePollInterval);
 }
Example #11
0
 public BeamgunState(IBeamgunSettings settings)
 {
     _settings = settings;
 }
Example #12
0
 public UsbStorageGuard(IBeamgunSettings settings)
 {
     _settings = settings;
 }
Example #13
0
 public DisableCommand(IViewModel viewModel, IBeamgunSettings beamgunSettings)
 {
     _viewModel       = viewModel;
     _beamgunSettings = beamgunSettings;
 }