Device enrolment with no model information

An exception was previously thrown when a device lacking
manufacturer/model information attempted to enrol.
This commit is contained in:
Gary Sharp
2016-11-09 15:43:44 +11:00
parent c72c18e825
commit afa548fb70
3 changed files with 42 additions and 9 deletions
+12 -1
View File
@@ -59,6 +59,10 @@ namespace Disco.Client.Interop
// Ignore // Ignore
// Indicates 'Wlanapi.dll' isn't present (ie. Servers) // Indicates 'Wlanapi.dll' isn't present (ie. Servers)
} }
catch (Exception ex)
{
throw new Exception("Disco Client was unable to retrieve Wireless NetworkAdapter information from WlanApi", ex);
}
} }
public static List<WirelessProfile> GetWirelessProfiles() public static List<WirelessProfile> GetWirelessProfiles()
@@ -96,6 +100,10 @@ namespace Disco.Client.Interop
// Indicates 'Wlanapi.dll' isn't present (ie. Servers) // Indicates 'Wlanapi.dll' isn't present (ie. Servers)
return null; return null;
} }
catch (Exception ex)
{
throw new Exception("Disco Client was unable to retrieve Wireless Profiles from WlanApi", ex);
}
} }
private static List<WirelessProfile> GetWirelessProfiles(IntPtr wlanHandle) private static List<WirelessProfile> GetWirelessProfiles(IntPtr wlanHandle)
@@ -346,7 +354,10 @@ namespace Disco.Client.Interop
// Indicates 'Wlanapi.dll' isn't present (ie. Servers) // Indicates 'Wlanapi.dll' isn't present (ie. Servers)
// Ignore policies // Ignore policies
} }
catch (Exception ex)
{
throw new Exception("Disco Client was unable to apply Wireless Profile Changes using WlanApi", ex);
}
} }
public static string Description(this WLAN_INTERFACE_STATE State) public static string Description(this WLAN_INTERFACE_STATE State)
@@ -50,6 +50,21 @@ namespace Disco.Services
public static Tuple<DeviceModel, bool> GetOrCreateDeviceModel(this DbSet<DeviceModel> DeviceModelsSet, string Manufacturer, string Model, string ModelType) public static Tuple<DeviceModel, bool> GetOrCreateDeviceModel(this DbSet<DeviceModel> DeviceModelsSet, string Manufacturer, string Model, string ModelType)
{ {
if (string.IsNullOrWhiteSpace(Manufacturer))
Manufacturer = "Unknown";
else
Manufacturer = Manufacturer.Trim();
if (string.IsNullOrWhiteSpace(Model))
Model = "Unknown";
else
Model = Model.Trim();
if (string.IsNullOrWhiteSpace(ModelType))
ModelType = null;
else
ModelType = ModelType.Trim();
// Already Exists? // Already Exists?
var deviceModel = DeviceModelsSet.FirstOrDefault(dm => dm.Manufacturer == Manufacturer && dm.Model == Model); var deviceModel = DeviceModelsSet.FirstOrDefault(dm => dm.Manufacturer == Manufacturer && dm.Model == Model);
if (deviceModel == null) if (deviceModel == null)
@@ -65,12 +80,19 @@ namespace Disco.Services
// Create the Device Model in a different DataContext so we don't have to commit unrelated changes // Create the Device Model in a different DataContext so we don't have to commit unrelated changes
using (DiscoDataContext database = new DiscoDataContext()) using (DiscoDataContext database = new DiscoDataContext())
{ {
var description = $"{Manufacturer} {Model}";
if (Model.Equals("Unknown", StringComparison.OrdinalIgnoreCase))
{
description = $"Unknown {Manufacturer} Model";
}
var addDeviceModel = new DeviceModel var addDeviceModel = new DeviceModel
{ {
Manufacturer = Manufacturer, Manufacturer = Manufacturer,
Model = Model, Model = Model,
ModelType = ModelType, ModelType = ModelType,
Description = string.Format("{0} {1}", Manufacturer, Model) Description = description
}; };
database.DeviceModels.Add(addDeviceModel); database.DeviceModels.Add(addDeviceModel);
database.SaveChanges(); database.SaveChanges();
@@ -22,7 +22,7 @@ namespace Disco.Services.Devices.Enrolment
public static MacSecureEnrolResponse MacSecureEnrol(DiscoDataContext Database, string Host) public static MacSecureEnrolResponse MacSecureEnrol(DiscoDataContext Database, string Host)
{ {
MacEnrol trustedRequest = new MacEnrol(); MacEnrol trustedRequest = new MacEnrol();
string sessionId = System.Guid.NewGuid().ToString("B"); string sessionId = Guid.NewGuid().ToString("B");
MacSecureEnrolResponse MacSecureEnrol; MacSecureEnrolResponse MacSecureEnrol;
try try
{ {
@@ -191,7 +191,7 @@ namespace Disco.Services.Devices.Enrolment
string sessionId; string sessionId;
if (OpenSessionId == null) if (OpenSessionId == null)
{ {
sessionId = System.Guid.NewGuid().ToString("B"); sessionId = Guid.NewGuid().ToString("B");
EnrolmentLog.LogSessionStarting(sessionId, Request.DeviceSerialNumber, EnrolmentTypes.Mac); EnrolmentLog.LogSessionStarting(sessionId, Request.DeviceSerialNumber, EnrolmentTypes.Mac);
} }
else else
@@ -221,7 +221,7 @@ namespace Disco.Services.Devices.Enrolment
EnrolmentLog.LogSessionTaskAddedDevice(sessionId, Request.DeviceSerialNumber); EnrolmentLog.LogSessionTaskAddedDevice(sessionId, Request.DeviceSerialNumber);
DeviceProfile deviceProfile = Database.DeviceProfiles.Find(Database.DiscoConfiguration.DeviceProfiles.DefaultDeviceProfileId); DeviceProfile deviceProfile = Database.DeviceProfiles.Find(Database.DiscoConfiguration.DeviceProfiles.DefaultDeviceProfileId);
var deviceModelResult = Database.DeviceModels.GetOrCreateDeviceModel(Request.DeviceManufacturer.Trim(), Request.DeviceModel.Trim(), Request.DeviceModelType.Trim()); var deviceModelResult = Database.DeviceModels.GetOrCreateDeviceModel(Request.DeviceManufacturer, Request.DeviceModel, Request.DeviceModelType);
DeviceModel deviceModel = deviceModelResult.Item1; DeviceModel deviceModel = deviceModelResult.Item1;
if (deviceModelResult.Item2) if (deviceModelResult.Item2)
EnrolmentLog.LogSessionTaskCreatedDeviceModel(sessionId, Request.DeviceSerialNumber, deviceModelResult.Item1.Manufacturer, deviceModelResult.Item1.Model); EnrolmentLog.LogSessionTaskCreatedDeviceModel(sessionId, Request.DeviceSerialNumber, deviceModelResult.Item1.Manufacturer, deviceModelResult.Item1.Model);
@@ -245,7 +245,7 @@ namespace Disco.Services.Devices.Enrolment
EnrolmentLog.LogSessionProgress(sessionId, 50, "Existing Device, Updating Disco Instance"); EnrolmentLog.LogSessionProgress(sessionId, 50, "Existing Device, Updating Disco Instance");
EnrolmentLog.LogSessionTaskUpdatingDevice(sessionId, Request.DeviceSerialNumber); EnrolmentLog.LogSessionTaskUpdatingDevice(sessionId, Request.DeviceSerialNumber);
var deviceModelResult = Database.DeviceModels.GetOrCreateDeviceModel(Request.DeviceManufacturer.Trim(), Request.DeviceModel.Trim(), Request.DeviceModelType.Trim()); var deviceModelResult = Database.DeviceModels.GetOrCreateDeviceModel(Request.DeviceManufacturer, Request.DeviceModel, Request.DeviceModelType);
DeviceModel deviceModel = deviceModelResult.Item1; DeviceModel deviceModel = deviceModelResult.Item1;
if (deviceModelResult.Item2) if (deviceModelResult.Item2)
EnrolmentLog.LogSessionTaskCreatedDeviceModel(sessionId, Request.DeviceSerialNumber, deviceModelResult.Item1.Manufacturer, deviceModelResult.Item1.Model); EnrolmentLog.LogSessionTaskCreatedDeviceModel(sessionId, Request.DeviceSerialNumber, deviceModelResult.Item1.Manufacturer, deviceModelResult.Item1.Model);
@@ -313,7 +313,7 @@ namespace Disco.Services.Devices.Enrolment
return domain.GetAvailableDomainController(RequireWritable: true); return domain.GetAvailableDomainController(RequireWritable: true);
}); });
string sessionId = System.Guid.NewGuid().ToString("B"); string sessionId = Guid.NewGuid().ToString("B");
response.SessionId = sessionId; response.SessionId = sessionId;
EnrolmentLog.LogSessionStarting(sessionId, Request.SerialNumber, EnrolmentTypes.Normal); EnrolmentLog.LogSessionStarting(sessionId, Request.SerialNumber, EnrolmentTypes.Normal);
@@ -396,7 +396,7 @@ namespace Disco.Services.Devices.Enrolment
DeviceProfile deviceProfile = Database.DeviceProfiles.Find(Database.DiscoConfiguration.DeviceProfiles.DefaultDeviceProfileId); DeviceProfile deviceProfile = Database.DeviceProfiles.Find(Database.DiscoConfiguration.DeviceProfiles.DefaultDeviceProfileId);
var deviceModelResult = Database.DeviceModels.GetOrCreateDeviceModel(Request.Hardware.Manufacturer.Trim(), Request.Hardware.Model.Trim(), Request.Hardware.ModelType.Trim()); var deviceModelResult = Database.DeviceModels.GetOrCreateDeviceModel(Request.Hardware.Manufacturer, Request.Hardware.Model, Request.Hardware.ModelType);
DeviceModel deviceModel = deviceModelResult.Item1; DeviceModel deviceModel = deviceModelResult.Item1;
if (deviceModelResult.Item2) if (deviceModelResult.Item2)
EnrolmentLog.LogSessionTaskCreatedDeviceModel(sessionId, Request.SerialNumber, deviceModelResult.Item1.Manufacturer, deviceModelResult.Item1.Model); EnrolmentLog.LogSessionTaskCreatedDeviceModel(sessionId, Request.SerialNumber, deviceModelResult.Item1.Manufacturer, deviceModelResult.Item1.Model);
@@ -432,7 +432,7 @@ namespace Disco.Services.Devices.Enrolment
EnrolmentLog.LogSessionProgress(sessionId, 30, "Existing Device, Updating Disco Instance"); EnrolmentLog.LogSessionProgress(sessionId, 30, "Existing Device, Updating Disco Instance");
EnrolmentLog.LogSessionTaskUpdatingDevice(sessionId, Request.SerialNumber); EnrolmentLog.LogSessionTaskUpdatingDevice(sessionId, Request.SerialNumber);
var deviceModelResult = Database.DeviceModels.GetOrCreateDeviceModel(Request.Hardware.Manufacturer.Trim(), Request.Hardware.Model.Trim(), Request.Hardware.ModelType.Trim()); var deviceModelResult = Database.DeviceModels.GetOrCreateDeviceModel(Request.Hardware.Manufacturer, Request.Hardware.Model, Request.Hardware.ModelType);
DeviceModel deviceModel = deviceModelResult.Item1; DeviceModel deviceModel = deviceModelResult.Item1;
if (deviceModelResult.Item2) if (deviceModelResult.Item2)
EnrolmentLog.LogSessionTaskCreatedDeviceModel(sessionId, Request.SerialNumber, deviceModelResult.Item1.Manufacturer, deviceModelResult.Item1.Model); EnrolmentLog.LogSessionTaskCreatedDeviceModel(sessionId, Request.SerialNumber, deviceModelResult.Item1.Manufacturer, deviceModelResult.Item1.Model);