Tidy: Sort/remove usings, simplify names

This commit is contained in:
Gary Sharp
2017-03-25 15:29:51 +11:00
parent 526f8547f7
commit ed66f4f285
168 changed files with 708 additions and 1175 deletions
@@ -1,8 +1,4 @@
using System; using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Disco.Services.Authorization namespace Disco.Services.Authorization
{ {
@@ -13,21 +9,21 @@ namespace Disco.Services.Authorization
public AccessDeniedException(string Message, string Resource) public AccessDeniedException(string Message, string Resource)
{ {
this.message = Message; message = Message;
this.resource = Resource; resource = Resource;
} }
public override string Message public override string Message
{ {
get get
{ {
if (this.message == null) if (message == null)
{ {
return "Your account does not have the required permission to access this Disco feature."; return "Your account does not have the required permission to access this Disco feature.";
} }
else else
{ {
return this.message; return message;
} }
} }
} }
@@ -36,7 +32,7 @@ namespace Disco.Services.Authorization
{ {
get get
{ {
return this.resource; return resource;
} }
} }
} }
@@ -1,11 +1,7 @@
using Disco.Models.Repository; using Disco.Models.Repository;
using Disco.Services.Logging; using Disco.Services.Logging;
using Disco.Services.Logging.Models; using Disco.Services.Logging.Models;
using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Disco.Services.Authorization namespace Disco.Services.Authorization
{ {
@@ -5,9 +5,6 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Diagnostics; using System.Diagnostics;
using System.Linq; using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Disco.Services.Interop.ActiveDirectory;
namespace Disco.Services.Authorization namespace Disco.Services.Authorization
{ {
@@ -3,8 +3,6 @@ using Disco.Services.Authorization.Roles;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Disco.Services.Authorization namespace Disco.Services.Authorization
{ {
@@ -26,9 +24,9 @@ namespace Disco.Services.Authorization
{ {
this.Key = Key; this.Key = Key;
var details = Claims.GetClaimDetails(Key); var details = Claims.GetClaimDetails(Key);
this.Name = details.Item1; Name = details.Item1;
this.Description = details.Item2; Description = details.Item2;
this.accessor = Claims.GetClaimAccessor(Key); accessor = Claims.GetClaimAccessor(Key);
this.Hidden = Hidden; this.Hidden = Hidden;
} }
@@ -52,13 +50,13 @@ namespace Disco.Services.Authorization
{ {
return new ClaimNavigatorItem() return new ClaimNavigatorItem()
{ {
Key = this.Key, Key = Key,
Name = this.Name, Name = Name,
Description = this.Description, Description = Description,
Hidden = this.Hidden, Hidden = Hidden,
accessor = this.accessor, accessor = accessor,
Value = this.accessor == null ? (bool?)null : this.accessor(RoleClaims), Value = accessor == null ? (bool?)null : accessor(RoleClaims),
Children = this.Children == null ? null : this.Children.Cast<ClaimNavigatorItem>().Select(c => c.BuildClaimTree(RoleClaims)).ToList() Children = Children == null ? null : Children.Cast<ClaimNavigatorItem>().Select(c => c.BuildClaimTree(RoleClaims)).ToList()
}; };
} }
@@ -66,19 +64,19 @@ namespace Disco.Services.Authorization
{ {
return new ClaimNavigatorItem() return new ClaimNavigatorItem()
{ {
Key = this.Key, Key = Key,
Name = this.Name, Name = Name,
Description = this.Description, Description = Description,
Hidden = this.Hidden, Hidden = Hidden,
accessor = this.accessor, accessor = accessor,
Value = this.accessor == null ? (bool?)null : RoleClaims.Any(rc => this.accessor(rc)), Value = accessor == null ? (bool?)null : RoleClaims.Any(rc => accessor(rc)),
Children = this.Children == null ? null : this.Children.Cast<ClaimNavigatorItem>().Select(c => c.BuildClaimTree(RoleClaims)).ToList() Children = Children == null ? null : Children.Cast<ClaimNavigatorItem>().Select(c => c.BuildClaimTree(RoleClaims)).ToList()
}; };
} }
public override string ToString() public override string ToString()
{ {
return string.Format("{0}: {1}={2}", this.Name, this.Key, this.Value); return string.Format("{0}: {1}={2}", Name, Key, Value);
} }
} }
} }
@@ -1,10 +1,4 @@
using Disco.Services.Users; using System;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web.Mvc;
namespace Disco.Services.Authorization namespace Disco.Services.Authorization
{ {
@@ -17,7 +11,7 @@ namespace Disco.Services.Authorization
if (AuthorisedClaims == null || AuthorisedClaims.Length == 0) if (AuthorisedClaims == null || AuthorisedClaims.Length == 0)
throw new ArgumentNullException("AuthorisedClaims"); throw new ArgumentNullException("AuthorisedClaims");
this.authorizedClaims = AuthorisedClaims; authorizedClaims = AuthorisedClaims;
} }
public override bool IsAuthorized(System.Web.HttpContextBase httpContext) public override bool IsAuthorized(System.Web.HttpContextBase httpContext)
@@ -1,10 +1,4 @@
using Disco.Services.Users; using System;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web.Mvc;
namespace Disco.Services.Authorization namespace Disco.Services.Authorization
{ {
@@ -17,7 +11,7 @@ namespace Disco.Services.Authorization
if (AuthorisedClaims == null || AuthorisedClaims.Length == 0) if (AuthorisedClaims == null || AuthorisedClaims.Length == 0)
throw new ArgumentNullException("AuthorisedClaims"); throw new ArgumentNullException("AuthorisedClaims");
this.authorizedClaims = AuthorisedClaims; authorizedClaims = AuthorisedClaims;
} }
public override bool IsAuthorized(System.Web.HttpContextBase httpContext) public override bool IsAuthorized(System.Web.HttpContextBase httpContext)
@@ -1,10 +1,4 @@
using Disco.Services.Users; using Disco.Services.Users;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web.Mvc;
namespace Disco.Services.Authorization namespace Disco.Services.Authorization
{ {
@@ -16,7 +10,7 @@ namespace Disco.Services.Authorization
public DiscoAuthorizeAttribute(string AuthorisedClaim) public DiscoAuthorizeAttribute(string AuthorisedClaim)
{ {
this.authorizedClaim = AuthorisedClaim; authorizedClaim = AuthorisedClaim;
} }
public override bool IsAuthorized(System.Web.HttpContextBase httpContext) public override bool IsAuthorized(System.Web.HttpContextBase httpContext)
@@ -1,10 +1,6 @@
using Disco.Services.Users; using Disco.Services.Users;
using System; using System;
using System.Collections.Generic;
using System.Linq;
using System.Net; using System.Net;
using System.Text;
using System.Threading.Tasks;
using System.Web.Mvc; using System.Web.Mvc;
namespace Disco.Services.Authorization namespace Disco.Services.Authorization
@@ -1,10 +1,4 @@
using System; namespace Disco.Services.Authorization.Roles
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Disco.Services.Authorization.Roles
{ {
public abstract class BaseRoleClaimGroup public abstract class BaseRoleClaimGroup
{ {
@@ -1,8 +1,4 @@
using System; using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Disco.Services.Authorization.Roles namespace Disco.Services.Authorization.Roles
{ {
@@ -19,19 +19,19 @@ namespace Disco.Services.Authorization.Roles.ClaimGroups.Configuration
{ {
public ConfigClaims() public ConfigClaims()
{ {
this.DeviceCertificate = new DeviceCertificateClaims(); DeviceCertificate = new DeviceCertificateClaims();
this.Enrolment = new EnrolmentClaims(); Enrolment = new EnrolmentClaims();
this.DeviceBatch = new DeviceBatchClaims(); DeviceBatch = new DeviceBatchClaims();
this.DeviceModel = new DeviceModelClaims(); DeviceModel = new DeviceModelClaims();
this.DeviceProfile = new DeviceProfileClaims(); DeviceProfile = new DeviceProfileClaims();
this.DocumentTemplate = new DocumentTemplateClaims(); DocumentTemplate = new DocumentTemplateClaims();
this.Logging = new LoggingClaims(); Logging = new LoggingClaims();
this.Plugin = new PluginClaims(); Plugin = new PluginClaims();
this.System = new SystemClaims(); System = new SystemClaims();
this.Organisation = new OrganisationClaims(); Organisation = new OrganisationClaims();
this.JobPreferences = new JobPreferencesClaims(); JobPreferences = new JobPreferencesClaims();
this.JobQueue = new JobQueueClaims(); JobQueue = new JobQueueClaims();
this.UserFlag = new UserFlagClaims(); UserFlag = new UserFlagClaims();
} }
[ClaimDetails("Show Configuration", "Can show the configuration menu")] [ClaimDetails("Show Configuration", "Can show the configuration menu")]
@@ -1,10 +1,4 @@
using System; namespace Disco.Services.Authorization.Roles.ClaimGroups.Configuration.DeviceBatch
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Disco.Services.Authorization.Roles.ClaimGroups.Configuration.DeviceBatch
{ {
[ClaimDetails("Device Batches", "Permissions related to Device Batches")] [ClaimDetails("Device Batches", "Permissions related to Device Batches")]
public class DeviceBatchClaims : BaseRoleClaimGroup public class DeviceBatchClaims : BaseRoleClaimGroup
@@ -1,10 +1,4 @@
using System; namespace Disco.Services.Authorization.Roles.ClaimGroups.Configuration.DeviceCertificate
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Disco.Services.Authorization.Roles.ClaimGroups.Configuration.DeviceCertificate
{ {
[ClaimDetails("Device Certificates", "Permissions related to Device Certificates")] [ClaimDetails("Device Certificates", "Permissions related to Device Certificates")]
public class DeviceCertificateClaims : BaseRoleClaimGroup public class DeviceCertificateClaims : BaseRoleClaimGroup
@@ -1,10 +1,4 @@
using System; namespace Disco.Services.Authorization.Roles.ClaimGroups.Configuration.DeviceModel
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Disco.Services.Authorization.Roles.ClaimGroups.Configuration.DeviceModel
{ {
[ClaimDetails("Device Models", "Permissions related to Device Models")] [ClaimDetails("Device Models", "Permissions related to Device Models")]
public class DeviceModelClaims : BaseRoleClaimGroup public class DeviceModelClaims : BaseRoleClaimGroup
@@ -1,10 +1,4 @@
using System; namespace Disco.Services.Authorization.Roles.ClaimGroups.Configuration.DeviceProfile
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Disco.Services.Authorization.Roles.ClaimGroups.Configuration.DeviceProfile
{ {
[ClaimDetails("Device Profiles", "Permissions related to Device Profiles")] [ClaimDetails("Device Profiles", "Permissions related to Device Profiles")]
public class DeviceProfileClaims : BaseRoleClaimGroup public class DeviceProfileClaims : BaseRoleClaimGroup
@@ -1,10 +1,4 @@
using System; namespace Disco.Services.Authorization.Roles.ClaimGroups.Configuration.DocumentTemplate
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Disco.Services.Authorization.Roles.ClaimGroups.Configuration.DocumentTemplate
{ {
[ClaimDetails("Document Templates", "Permissions related to Document Templates")] [ClaimDetails("Document Templates", "Permissions related to Document Templates")]
public class DocumentTemplateClaims : BaseRoleClaimGroup public class DocumentTemplateClaims : BaseRoleClaimGroup
@@ -1,10 +1,4 @@
using System; namespace Disco.Services.Authorization.Roles.ClaimGroups.Configuration.Enrolment
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Disco.Services.Authorization.Roles.ClaimGroups.Configuration.Enrolment
{ {
[ClaimDetails("Enrolment", "Permissions related to Device Enrolment")] [ClaimDetails("Enrolment", "Permissions related to Device Enrolment")]
public class EnrolmentClaims public class EnrolmentClaims
@@ -1,10 +1,4 @@
using System; namespace Disco.Services.Authorization.Roles.ClaimGroups.Configuration.JobQueue
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Disco.Services.Authorization.Roles.ClaimGroups.Configuration.JobQueue
{ {
[ClaimDetails("Job Queues", "Permissions related to Job Queues")] [ClaimDetails("Job Queues", "Permissions related to Job Queues")]
public class JobQueueClaims : BaseRoleClaimGroup public class JobQueueClaims : BaseRoleClaimGroup
@@ -1,10 +1,4 @@
using System; namespace Disco.Services.Authorization.Roles.ClaimGroups.Configuration.Logging
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Disco.Services.Authorization.Roles.ClaimGroups.Configuration.Logging
{ {
[ClaimDetails("Logging", "Permissions related to Logging")] [ClaimDetails("Logging", "Permissions related to Logging")]
public class LoggingClaims : BaseRoleClaimGroup public class LoggingClaims : BaseRoleClaimGroup
@@ -1,10 +1,4 @@
using System; namespace Disco.Services.Authorization.Roles.ClaimGroups.Configuration.Origanisation
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Disco.Services.Authorization.Roles.ClaimGroups.Configuration.Origanisation
{ {
[ClaimDetails("Organisation Details", "Permissions related to the Organisation Details")] [ClaimDetails("Organisation Details", "Permissions related to the Organisation Details")]
public class OrganisationClaims : BaseRoleClaimGroup public class OrganisationClaims : BaseRoleClaimGroup
@@ -1,10 +1,4 @@
using System; namespace Disco.Services.Authorization.Roles.ClaimGroups.Configuration.Plugin
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Disco.Services.Authorization.Roles.ClaimGroups.Configuration.Plugin
{ {
[ClaimDetails("Plugin", "Permissions related to Plugins")] [ClaimDetails("Plugin", "Permissions related to Plugins")]
public class PluginClaims : BaseRoleClaimGroup public class PluginClaims : BaseRoleClaimGroup
@@ -1,10 +1,4 @@
using System; namespace Disco.Services.Authorization.Roles.ClaimGroups.Configuration.System
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Disco.Services.Authorization.Roles.ClaimGroups.Configuration.System
{ {
[ClaimDetails("System", "Permissions related to System Configuration")] [ClaimDetails("System", "Permissions related to System Configuration")]
public class SystemClaims : BaseRoleClaimGroup public class SystemClaims : BaseRoleClaimGroup
@@ -1,10 +1,4 @@
using System; namespace Disco.Services.Authorization.Roles.ClaimGroups.Device
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Disco.Services.Authorization.Roles.ClaimGroups.Device
{ {
[ClaimDetails("Actions", "Permissions related to Device Actions")] [ClaimDetails("Actions", "Permissions related to Device Actions")]
public class DeviceActionsClaims : BaseRoleClaimGroup public class DeviceActionsClaims : BaseRoleClaimGroup
@@ -1,18 +1,12 @@
using System; namespace Disco.Services.Authorization.Roles.ClaimGroups.Device
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Disco.Services.Authorization.Roles.ClaimGroups.Device
{ {
[ClaimDetails("Device", "Permissions related to Devices")] [ClaimDetails("Device", "Permissions related to Devices")]
public class DeviceClaims : BaseRoleClaimGroup public class DeviceClaims : BaseRoleClaimGroup
{ {
public DeviceClaims() public DeviceClaims()
{ {
this.Properties = new DevicePropertiesClaims(); Properties = new DevicePropertiesClaims();
this.Actions = new DeviceActionsClaims(); Actions = new DeviceActionsClaims();
} }
[ClaimDetails("Search Devices", "Can search devices")] [ClaimDetails("Search Devices", "Can search devices")]
@@ -1,10 +1,4 @@
using System; namespace Disco.Services.Authorization.Roles.ClaimGroups.Device
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Disco.Services.Authorization.Roles.ClaimGroups.Device
{ {
[ClaimDetails("Device Properties", "Permissions related to Device Properties")] [ClaimDetails("Device Properties", "Permissions related to Device Properties")]
public class DevicePropertiesClaims : BaseRoleClaimGroup public class DevicePropertiesClaims : BaseRoleClaimGroup
@@ -1,10 +1,4 @@
using System; namespace Disco.Services.Authorization.Roles.ClaimGroups.Job
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Disco.Services.Authorization.Roles.ClaimGroups.Job
{ {
[ClaimDetails("Actions", "Permissions related to Job Actions")] [ClaimDetails("Actions", "Permissions related to Job Actions")]
public class JobActionsClaims : BaseRoleClaimGroup public class JobActionsClaims : BaseRoleClaimGroup
@@ -1,20 +1,14 @@
using System; namespace Disco.Services.Authorization.Roles.ClaimGroups.Job
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Disco.Services.Authorization.Roles.ClaimGroups.Job
{ {
[ClaimDetails("Job", "Permissions related to Jobs")] [ClaimDetails("Job", "Permissions related to Jobs")]
public class JobClaims : BaseRoleClaimGroup public class JobClaims : BaseRoleClaimGroup
{ {
public JobClaims() public JobClaims()
{ {
this.Lists = new JobListsClaims(); Lists = new JobListsClaims();
this.Actions = new JobActionsClaims(); Actions = new JobActionsClaims();
this.Properties = new JobPropertiesClaims(); Properties = new JobPropertiesClaims();
this.Types = new JobTypesClaims(); Types = new JobTypesClaims();
} }
[ClaimDetails("Search Jobs", "Can search jobs")] [ClaimDetails("Search Jobs", "Can search jobs")]
@@ -1,10 +1,4 @@
using System; namespace Disco.Services.Authorization.Roles.ClaimGroups.Job
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Disco.Services.Authorization.Roles.ClaimGroups.Job
{ {
[ClaimDetails("Lists", "Permissions related to Job Lists")] [ClaimDetails("Lists", "Permissions related to Job Lists")]
public class JobListsClaims : BaseRoleClaimGroup public class JobListsClaims : BaseRoleClaimGroup
@@ -1,10 +1,4 @@
using System; namespace Disco.Services.Authorization.Roles.ClaimGroups.Job
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Disco.Services.Authorization.Roles.ClaimGroups.Job
{ {
[ClaimDetails("Non Warranty Properties", "Permissions related to Non-Warranty Job Properties")] [ClaimDetails("Non Warranty Properties", "Permissions related to Non-Warranty Job Properties")]
public class JobNonWarrantyPropertiesClaims : BaseRoleClaimGroup public class JobNonWarrantyPropertiesClaims : BaseRoleClaimGroup
@@ -1,19 +1,13 @@
using System; namespace Disco.Services.Authorization.Roles.ClaimGroups.Job
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Disco.Services.Authorization.Roles.ClaimGroups.Job
{ {
[ClaimDetails("Job Properties", "Permissions related to Job Properties")] [ClaimDetails("Job Properties", "Permissions related to Job Properties")]
public class JobPropertiesClaims : BaseRoleClaimGroup public class JobPropertiesClaims : BaseRoleClaimGroup
{ {
public JobPropertiesClaims() public JobPropertiesClaims()
{ {
this.WarrantyProperties = new JobWarrantyPropertiesClaims(); WarrantyProperties = new JobWarrantyPropertiesClaims();
this.NonWarrantyProperties = new JobNonWarrantyPropertiesClaims(); NonWarrantyProperties = new JobNonWarrantyPropertiesClaims();
this.JobQueueProperties = new JobQueuePropertiesClaims(); JobQueueProperties = new JobQueuePropertiesClaims();
} }
public JobWarrantyPropertiesClaims WarrantyProperties { get; set; } public JobWarrantyPropertiesClaims WarrantyProperties { get; set; }
@@ -1,10 +1,4 @@
using System; namespace Disco.Services.Authorization.Roles.ClaimGroups.Job
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Disco.Services.Authorization.Roles.ClaimGroups.Job
{ {
[ClaimDetails("Job Queue Properties", "Permissions related to Job Queue Job Properties")] [ClaimDetails("Job Queue Properties", "Permissions related to Job Queue Job Properties")]
public class JobQueuePropertiesClaims : BaseRoleClaimGroup public class JobQueuePropertiesClaims : BaseRoleClaimGroup
@@ -1,10 +1,4 @@
using System; namespace Disco.Services.Authorization.Roles.ClaimGroups.Job
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Disco.Services.Authorization.Roles.ClaimGroups.Job
{ {
[ClaimDetails("Types", "Permissions related to Job Types")] [ClaimDetails("Types", "Permissions related to Job Types")]
public class JobTypesClaims : BaseRoleClaimGroup public class JobTypesClaims : BaseRoleClaimGroup
@@ -1,10 +1,4 @@
using System; namespace Disco.Services.Authorization.Roles.ClaimGroups.Job
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Disco.Services.Authorization.Roles.ClaimGroups.Job
{ {
[ClaimDetails("Warranty Properties", "Permissions related to Warranty Job Properties")] [ClaimDetails("Warranty Properties", "Permissions related to Warranty Job Properties")]
public class JobWarrantyPropertiesClaims : BaseRoleClaimGroup public class JobWarrantyPropertiesClaims : BaseRoleClaimGroup
@@ -1,17 +1,11 @@
using System; namespace Disco.Services.Authorization.Roles.ClaimGroups.User
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Disco.Services.Authorization.Roles.ClaimGroups.User
{ {
[ClaimDetails("User", "Permissions related to Users")] [ClaimDetails("User", "Permissions related to Users")]
public class UserClaims : BaseRoleClaimGroup public class UserClaims : BaseRoleClaimGroup
{ {
public UserClaims() public UserClaims()
{ {
this.Actions = new UserActionsClaims(); Actions = new UserActionsClaims();
} }
[ClaimDetails("Search Users", "Can search users")] [ClaimDetails("Search Users", "Can search users")]
@@ -2,11 +2,8 @@
using Disco.Models.Services.Authorization; using Disco.Models.Services.Authorization;
using Disco.Models.Repository; using Disco.Models.Repository;
using System; using System;
using System.Collections.Concurrent;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Disco.Services.Interop.ActiveDirectory; using Disco.Services.Interop.ActiveDirectory;
using Newtonsoft.Json; using Newtonsoft.Json;
@@ -1,13 +1,7 @@
using Disco.Services.Authorization.Roles.ClaimGroups; using Disco.Services.Authorization.Roles.ClaimGroups.Configuration;
using Disco.Services.Authorization.Roles.ClaimGroups.Configuration;
using Disco.Services.Authorization.Roles.ClaimGroups.Device; using Disco.Services.Authorization.Roles.ClaimGroups.Device;
using Disco.Services.Authorization.Roles.ClaimGroups.Job; using Disco.Services.Authorization.Roles.ClaimGroups.Job;
using Disco.Services.Authorization.Roles.ClaimGroups.User; using Disco.Services.Authorization.Roles.ClaimGroups.User;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Disco.Services.Authorization.Roles namespace Disco.Services.Authorization.Roles
{ {
@@ -15,11 +9,11 @@ namespace Disco.Services.Authorization.Roles
{ {
public RoleClaims() public RoleClaims()
{ {
this.Config = new ConfigClaims(); Config = new ConfigClaims();
this.Job = new JobClaims(); Job = new JobClaims();
this.Device = new DeviceClaims(); Device = new DeviceClaims();
this.User = new UserClaims(); User = new UserClaims();
} }
[ClaimDetails("Computer Account", "Represents a computer account", true)] [ClaimDetails("Computer Account", "Represents a computer account", true)]
@@ -4,8 +4,6 @@ using Newtonsoft.Json;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Disco.Services.Authorization.Roles namespace Disco.Services.Authorization.Roles
{ {
@@ -10,8 +10,6 @@ using Exceptionless;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Disco.Services namespace Disco.Services
{ {
@@ -344,7 +344,7 @@ namespace Disco.Services.Devices.Enrolment
if (domain == null) if (domain == null)
domain = ActiveDirectory.Context.GetDomainByName(Request.DNSDomainName); domain = ActiveDirectory.Context.GetDomainByName(Request.DNSDomainName);
if (!authenticatedToken.User.UserId.Equals(string.Format(@"{0}\{1}$", domain.NetBiosName, Request.ComputerName), System.StringComparison.OrdinalIgnoreCase)) if (!authenticatedToken.User.UserId.Equals(string.Format(@"{0}\{1}$", domain.NetBiosName, Request.ComputerName), StringComparison.OrdinalIgnoreCase))
throw new EnrolmentSafeException(string.Format("Connection not correctly authenticated (SN: {0}; Auth User: {1})", Request.SerialNumber, authenticatedToken.User.UserId)); throw new EnrolmentSafeException(string.Format("Connection not correctly authenticated (SN: {0}; Auth User: {1})", Request.SerialNumber, authenticatedToken.User.UserId));
} }
} }
@@ -1,10 +1,4 @@
using System; namespace Disco.Services.Devices.Enrolment
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Disco.Services.Devices.Enrolment
{ {
public enum EnrolmentTypes public enum EnrolmentTypes
{ {
@@ -54,7 +54,7 @@ namespace Disco.Services.Devices.Enrolment
var trigger = TriggerBuilder.Create() var trigger = TriggerBuilder.Create()
.StartAt(DateTimeOffset.Now.AddMinutes(5)); .StartAt(DateTimeOffset.Now.AddMinutes(5));
this.ScheduleTask(trigger); ScheduleTask(trigger);
} }
} }
@@ -1,10 +1,6 @@
using Disco.Models.Repository; using Disco.Models.Services.Devices.Exporting;
using Disco.Models.Services.Devices.Exporting;
using Disco.Services.Tasks; using Disco.Services.Tasks;
using Quartz; using Quartz;
using System;
using System.IO;
using System.Linq;
using Disco.Data.Repository; using Disco.Data.Repository;
namespace Disco.Services.Devices.Exporting namespace Disco.Services.Devices.Exporting
@@ -34,13 +30,13 @@ namespace Disco.Services.Devices.Exporting
protected override void ExecuteTask() protected override void ExecuteTask()
{ {
var context = (DeviceExportTaskContext)this.ExecutionContext.JobDetail.JobDataMap[JobDataMapContext]; var context = (DeviceExportTaskContext)ExecutionContext.JobDetail.JobDataMap[JobDataMapContext];
Status.UpdateStatus(10, "Exporting Device Records", "Starting..."); Status.UpdateStatus(10, "Exporting Device Records", "Starting...");
using (DiscoDataContext Database = new DiscoDataContext()) using (DiscoDataContext Database = new DiscoDataContext())
{ {
context.Result = DeviceExport.GenerateExport(Database, context.Options, this.Status); context.Result = DeviceExport.GenerateExport(Database, context.Options, Status);
} }
} }
} }
@@ -1,6 +1,5 @@
using Disco.Models.Services.Devices.Exporting; using Disco.Models.Services.Devices.Exporting;
using Disco.Services.Tasks; using Disco.Services.Tasks;
using System.IO;
namespace Disco.Services.Devices.Exporting namespace Disco.Services.Devices.Exporting
{ {
@@ -1,4 +1,5 @@
using Disco.Data.Repository; using Disco.Data.Repository;
using Disco.Models.Services.Devices.Importing;
using Disco.Services.Tasks; using Disco.Services.Tasks;
using Quartz; using Quartz;
using System; using System;
@@ -13,10 +14,10 @@ namespace Disco.Services.Devices.Importing
public override bool SingleInstanceTask { get { return false; } } public override bool SingleInstanceTask { get { return false; } }
public override bool CancelInitiallySupported { get { return false; } } public override bool CancelInitiallySupported { get { return false; } }
public static ScheduledTaskStatus ScheduleNow(DeviceImportContext Context) public static ScheduledTaskStatus ScheduleNow(IDeviceImportContext Context)
{ {
if (Context == null) if (Context == null)
throw new ArgumentNullException("Context"); throw new ArgumentNullException(nameof(Context));
// Build Data Map // Build Data Map
var task = new DeviceImportApplyTask(); var task = new DeviceImportApplyTask();
@@ -28,14 +29,14 @@ namespace Disco.Services.Devices.Importing
protected override void ExecuteTask() protected override void ExecuteTask()
{ {
var context = (DeviceImportContext)this.ExecutionContext.JobDetail.JobDataMap[JobDataMapContext]; var context = (IDeviceImportContext)ExecutionContext.JobDetail.JobDataMap[JobDataMapContext];
using (DiscoDataContext Database = new DiscoDataContext()) using (DiscoDataContext Database = new DiscoDataContext())
{ {
context.AffectedRecords = context.ApplyRecords(Database, this.Status); context.AffectedRecords = context.ApplyRecords(Database, Status);
} }
Status.SetFinishedMessage(string.Format("Successfully imported/updated {0} device{1}", context.AffectedRecords, context.AffectedRecords == 1 ? null : "s")); Status.SetFinishedMessage($"Successfully imported/updated {context.AffectedRecords} device{(context.AffectedRecords == 1 ? null : "s")}");
} }
} }
} }
@@ -0,0 +1,21 @@
using Disco.Models.Services.Devices.Importing;
using System;
namespace Disco.Services.Devices.Importing
{
public class DeviceImportColumn : IDeviceImportColumn
{
public int Index { get; set; }
public string Name { get; set; }
public DeviceImportFieldTypes Type { get; set; }
public Type Handler { get; set; }
public IDeviceImportField GetHandlerInstance()
{
if (Handler == null)
throw new InvalidOperationException($"No field handler available for this type {Type.ToString()}.");
return (IDeviceImportField)Activator.CreateInstance(Handler);
}
}
}
@@ -19,10 +19,10 @@ namespace Disco.Services.Devices.Importing
{ {
this.Database = Database; this.Database = Database;
this.devices = new Lazy<IEnumerable<Device>>(() => Database.Devices.Include("DeviceDetails").ToList()); devices = new Lazy<IEnumerable<Device>>(() => Database.Devices.Include("DeviceDetails").ToList());
this.deviceModels = new Lazy<IEnumerable<DeviceModel>>(() => Database.DeviceModels.ToList()); deviceModels = new Lazy<IEnumerable<DeviceModel>>(() => Database.DeviceModels.ToList());
this.deviceProfiles = new Lazy<IEnumerable<DeviceProfile>>(() => Database.DeviceProfiles.ToList()); deviceProfiles = new Lazy<IEnumerable<DeviceProfile>>(() => Database.DeviceProfiles.ToList());
this.deviceBatches = new Lazy<IEnumerable<DeviceBatch>>(() => Database.DeviceBatches.ToList()); deviceBatches = new Lazy<IEnumerable<DeviceBatch>>(() => Database.DeviceBatches.ToList());
} }
public Device FindDevice(string DeviceSerialNumber) public Device FindDevice(string DeviceSerialNumber)
@@ -47,8 +47,8 @@ namespace Disco.Services.Devices.ManagedGroups
private DeviceBatchAssignedUsersManagedGroup(string Key, ADManagedGroupConfiguration Configuration, DeviceBatch DeviceBatch) private DeviceBatchAssignedUsersManagedGroup(string Key, ADManagedGroupConfiguration Configuration, DeviceBatch DeviceBatch)
: base(Key, Configuration) : base(Key, Configuration)
{ {
this.DeviceBatchId = DeviceBatch.Id; DeviceBatchId = DeviceBatch.Id;
this.DeviceBatchName = DeviceBatch.Name; DeviceBatchName = DeviceBatch.Name;
} }
public override void Initialize() public override void Initialize()
@@ -125,7 +125,7 @@ namespace Disco.Services.Devices.ManagedGroups
public override IEnumerable<string> DetermineMembers(DiscoDataContext Database) public override IEnumerable<string> DetermineMembers(DiscoDataContext Database)
{ {
return Database.Devices return Database.Devices
.Where(d => d.DeviceBatchId == this.DeviceBatchId) .Where(d => d.DeviceBatchId == DeviceBatchId)
.Where(d => d.AssignedUserId != null) .Where(d => d.AssignedUserId != null)
.Select(d => d.AssignedUserId); .Select(d => d.AssignedUserId);
} }
@@ -143,7 +143,7 @@ namespace Disco.Services.Devices.ManagedGroups
AddMember(device.AssignedUserId); AddMember(device.AssignedUserId);
break; break;
case RepositoryMonitorEventType.Modified: case RepositoryMonitorEventType.Modified:
if (device.DeviceBatchId == this.DeviceBatchId) if (device.DeviceBatchId == DeviceBatchId)
{ {
if (device.AssignedUserId != null) if (device.AssignedUserId != null)
AddMember(device.AssignedUserId); AddMember(device.AssignedUserId);
@@ -152,7 +152,7 @@ namespace Disco.Services.Devices.ManagedGroups
{ {
if (previousUserId != null) if (previousUserId != null)
RemoveMember(previousUserId, (database) => RemoveMember(previousUserId, (database) =>
!database.Devices.Any(d => d.DeviceBatchId == this.DeviceBatchId && d.AssignedUserId == previousUserId) !database.Devices.Any(d => d.DeviceBatchId == DeviceBatchId && d.AssignedUserId == previousUserId)
? new string[] { previousUserId } ? new string[] { previousUserId }
: null); : null);
} }
@@ -161,7 +161,7 @@ namespace Disco.Services.Devices.ManagedGroups
{ {
if (previousUserId != null) if (previousUserId != null)
RemoveMember(previousUserId, (database) => RemoveMember(previousUserId, (database) =>
!database.Devices.Any(d => d.DeviceBatchId == this.DeviceBatchId && d.AssignedUserId == previousUserId) !database.Devices.Any(d => d.DeviceBatchId == DeviceBatchId && d.AssignedUserId == previousUserId)
? new string[] { previousUserId } ? new string[] { previousUserId }
: null); : null);
} }
@@ -169,7 +169,7 @@ namespace Disco.Services.Devices.ManagedGroups
case RepositoryMonitorEventType.Deleted: case RepositoryMonitorEventType.Deleted:
if (previousUserId != null) if (previousUserId != null)
RemoveMember(previousUserId, (database) => RemoveMember(previousUserId, (database) =>
!database.Devices.Any(d => d.DeviceBatchId == this.DeviceBatchId && d.AssignedUserId == previousUserId) !database.Devices.Any(d => d.DeviceBatchId == DeviceBatchId && d.AssignedUserId == previousUserId)
? new string[] { previousUserId } ? new string[] { previousUserId }
: null); : null);
break; break;
@@ -45,8 +45,8 @@ namespace Disco.Services.Devices.ManagedGroups
private DeviceBatchDevicesManagedGroup(string Key, ADManagedGroupConfiguration Configuration, DeviceBatch DeviceBatch) private DeviceBatchDevicesManagedGroup(string Key, ADManagedGroupConfiguration Configuration, DeviceBatch DeviceBatch)
: base(Key, Configuration) : base(Key, Configuration)
{ {
this.DeviceBatchId = DeviceBatch.Id; DeviceBatchId = DeviceBatch.Id;
this.DeviceBatchName = DeviceBatch.Name; DeviceBatchName = DeviceBatch.Name;
} }
public override void Initialize() public override void Initialize()
@@ -123,7 +123,7 @@ namespace Disco.Services.Devices.ManagedGroups
public override IEnumerable<string> DetermineMembers(DiscoDataContext Database) public override IEnumerable<string> DetermineMembers(DiscoDataContext Database)
{ {
return Database.Devices return Database.Devices
.Where(d => d.DeviceBatchId == this.DeviceBatchId) .Where(d => d.DeviceBatchId == DeviceBatchId)
.Where(d => d.DeviceDomainId != null) .Where(d => d.DeviceDomainId != null)
.Select(d => d.DeviceDomainId) .Select(d => d.DeviceDomainId)
.ToList() .ToList()
@@ -144,7 +144,7 @@ namespace Disco.Services.Devices.ManagedGroups
AddMember(device.DeviceDomainId + "$"); AddMember(device.DeviceDomainId + "$");
break; break;
case RepositoryMonitorEventType.Modified: case RepositoryMonitorEventType.Modified:
if (device.DeviceBatchId == this.DeviceBatchId) if (device.DeviceBatchId == DeviceBatchId)
{ {
if (ActiveDirectory.IsValidDomainAccountId(device.DeviceDomainId)) if (ActiveDirectory.IsValidDomainAccountId(device.DeviceDomainId))
AddMember(device.DeviceDomainId + "$"); AddMember(device.DeviceDomainId + "$");
@@ -47,8 +47,8 @@ namespace Disco.Services.Devices.ManagedGroups
private DeviceProfileAssignedUsersManagedGroup(string Key, ADManagedGroupConfiguration Configuration, DeviceProfile DeviceProfile) private DeviceProfileAssignedUsersManagedGroup(string Key, ADManagedGroupConfiguration Configuration, DeviceProfile DeviceProfile)
: base(Key, Configuration) : base(Key, Configuration)
{ {
this.DeviceProfileId = DeviceProfile.Id; DeviceProfileId = DeviceProfile.Id;
this.DeviceProfileName = DeviceProfile.Name; DeviceProfileName = DeviceProfile.Name;
} }
public override void Initialize() public override void Initialize()
@@ -125,7 +125,7 @@ namespace Disco.Services.Devices.ManagedGroups
public override IEnumerable<string> DetermineMembers(DiscoDataContext Database) public override IEnumerable<string> DetermineMembers(DiscoDataContext Database)
{ {
return Database.Devices return Database.Devices
.Where(d => d.DeviceProfileId == this.DeviceProfileId) .Where(d => d.DeviceProfileId == DeviceProfileId)
.Where(d => d.AssignedUserId != null) .Where(d => d.AssignedUserId != null)
.Select(d => d.AssignedUserId); .Select(d => d.AssignedUserId);
} }
@@ -143,7 +143,7 @@ namespace Disco.Services.Devices.ManagedGroups
AddMember(device.AssignedUserId); AddMember(device.AssignedUserId);
break; break;
case RepositoryMonitorEventType.Modified: case RepositoryMonitorEventType.Modified:
if (device.DeviceProfileId == this.DeviceProfileId) if (device.DeviceProfileId == DeviceProfileId)
{ {
if (device.AssignedUserId != null) if (device.AssignedUserId != null)
AddMember(device.AssignedUserId); AddMember(device.AssignedUserId);
@@ -152,7 +152,7 @@ namespace Disco.Services.Devices.ManagedGroups
{ {
if (previousUserId != null) if (previousUserId != null)
RemoveMember(previousUserId, (database) => RemoveMember(previousUserId, (database) =>
!database.Devices.Any(d => d.DeviceProfileId == this.DeviceProfileId && d.AssignedUserId == previousUserId) !database.Devices.Any(d => d.DeviceProfileId == DeviceProfileId && d.AssignedUserId == previousUserId)
? new string[] { previousUserId } ? new string[] { previousUserId }
: null); : null);
} }
@@ -161,7 +161,7 @@ namespace Disco.Services.Devices.ManagedGroups
{ {
if (previousUserId != null) if (previousUserId != null)
RemoveMember(previousUserId, (database) => RemoveMember(previousUserId, (database) =>
!database.Devices.Any(d => d.DeviceProfileId == this.DeviceProfileId && d.AssignedUserId == previousUserId) !database.Devices.Any(d => d.DeviceProfileId == DeviceProfileId && d.AssignedUserId == previousUserId)
? new string[] { previousUserId } ? new string[] { previousUserId }
: null); : null);
} }
@@ -169,7 +169,7 @@ namespace Disco.Services.Devices.ManagedGroups
case RepositoryMonitorEventType.Deleted: case RepositoryMonitorEventType.Deleted:
if (previousUserId != null) if (previousUserId != null)
RemoveMember(previousUserId, (database) => RemoveMember(previousUserId, (database) =>
!database.Devices.Any(d => d.DeviceProfileId == this.DeviceProfileId && d.AssignedUserId == previousUserId) !database.Devices.Any(d => d.DeviceProfileId == DeviceProfileId && d.AssignedUserId == previousUserId)
? new string[] { previousUserId } ? new string[] { previousUserId }
: null); : null);
break; break;
@@ -46,8 +46,8 @@ namespace Disco.Services.Devices.ManagedGroups
private DeviceProfileDevicesManagedGroup(string Key, ADManagedGroupConfiguration Configuration, DeviceProfile DeviceProfile) private DeviceProfileDevicesManagedGroup(string Key, ADManagedGroupConfiguration Configuration, DeviceProfile DeviceProfile)
: base(Key, Configuration) : base(Key, Configuration)
{ {
this.DeviceProfileId = DeviceProfile.Id; DeviceProfileId = DeviceProfile.Id;
this.DeviceProfileName = DeviceProfile.Name; DeviceProfileName = DeviceProfile.Name;
} }
public override void Initialize() public override void Initialize()
@@ -124,7 +124,7 @@ namespace Disco.Services.Devices.ManagedGroups
public override IEnumerable<string> DetermineMembers(DiscoDataContext Database) public override IEnumerable<string> DetermineMembers(DiscoDataContext Database)
{ {
return Database.Devices return Database.Devices
.Where(d => d.DeviceProfileId == this.DeviceProfileId) .Where(d => d.DeviceProfileId == DeviceProfileId)
.Where(d => d.DeviceDomainId != null) .Where(d => d.DeviceDomainId != null)
.Select(d => d.DeviceDomainId) .Select(d => d.DeviceDomainId)
.ToList() .ToList()
@@ -145,7 +145,7 @@ namespace Disco.Services.Devices.ManagedGroups
AddMember(device.DeviceDomainId + "$"); AddMember(device.DeviceDomainId + "$");
break; break;
case RepositoryMonitorEventType.Modified: case RepositoryMonitorEventType.Modified:
if (device.DeviceProfileId == this.DeviceProfileId) if (device.DeviceProfileId == DeviceProfileId)
{ {
if (ActiveDirectory.IsValidDomainAccountId(device.DeviceDomainId)) if (ActiveDirectory.IsValidDomainAccountId(device.DeviceDomainId))
AddMember(device.DeviceDomainId + "$"); AddMember(device.DeviceDomainId + "$");
@@ -73,7 +73,7 @@ namespace Disco.Services.Documents.AttachmentImport
public void ScheduleCurrentFiles(int ImportDelay) public void ScheduleCurrentFiles(int ImportDelay)
{ {
foreach (var filename in Directory.GetFiles(this.MonitorLocation, "*.pdf")) foreach (var filename in Directory.GetFiles(MonitorLocation, "*.pdf"))
{ {
ScheduleImport(filename, ImportDelay); ScheduleImport(filename, ImportDelay);
} }
@@ -1,5 +1,4 @@
using Disco.Data.Repository; using Disco.Data.Repository;
using Disco.Services.Logging;
using Disco.Services.Tasks; using Disco.Services.Tasks;
using Quartz; using Quartz;
using System; using System;
@@ -20,7 +19,7 @@ namespace Disco.Services.Documents.AttachmentImport
// Trigger Daily @ 12:30am // Trigger Daily @ 12:30am
TriggerBuilder triggerBuilder = TriggerBuilder.Create().WithSchedule(CronScheduleBuilder.DailyAtHourAndMinute(0, 30)); TriggerBuilder triggerBuilder = TriggerBuilder.Create().WithSchedule(CronScheduleBuilder.DailyAtHourAndMinute(0, 30));
this.ScheduleTask(triggerBuilder); ScheduleTask(triggerBuilder);
} }
protected override void ExecuteTask() protected override void ExecuteTask()
@@ -55,7 +55,7 @@ namespace Disco.Services.Documents.AttachmentImport
var trigger = TriggerBuilder.Create() var trigger = TriggerBuilder.Create()
.StartAt(DateTimeOffset.Now.AddMinutes(5)); .StartAt(DateTimeOffset.Now.AddMinutes(5));
this.ScheduleTask(trigger); ScheduleTask(trigger);
} }
} }
@@ -137,11 +137,11 @@ namespace Disco.Services.Documents
private DocumentUniqueIdentifier(DiscoDataContext Database, int Version, short DeploymentChecksum, string DocumentTemplateId, string TargetId, string CreatorId, DateTime TimeStamp, int PageIndex, AttachmentTypes? AttachmentType) private DocumentUniqueIdentifier(DiscoDataContext Database, int Version, short DeploymentChecksum, string DocumentTemplateId, string TargetId, string CreatorId, DateTime TimeStamp, int PageIndex, AttachmentTypes? AttachmentType)
{ {
this.database = Database; database = Database;
this.Version = Version; this.Version = Version;
this.DeploymentChecksum = DeploymentChecksum; this.DeploymentChecksum = DeploymentChecksum;
this.DocumentTemplateId = DocumentTemplateId; this.DocumentTemplateId = DocumentTemplateId;
this.attachmentType = AttachmentType; attachmentType = AttachmentType;
this.TargetId = TargetId; this.TargetId = TargetId;
this.CreatorId = ActiveDirectory.ParseDomainAccountId(CreatorId); this.CreatorId = ActiveDirectory.ParseDomainAccountId(CreatorId);
this.TimeStamp = TimeStamp; this.TimeStamp = TimeStamp;
@@ -440,7 +440,7 @@ namespace Disco.Services.Documents
public static bool IsDocumentUniqueIdentifier(string Identifier) public static bool IsDocumentUniqueIdentifier(string Identifier)
{ {
return Identifier != null && Identifier.StartsWith("Disco|", System.StringComparison.OrdinalIgnoreCase); return Identifier != null && Identifier.StartsWith("Disco|", StringComparison.OrdinalIgnoreCase);
} }
public static bool IsDocumentUniqueIdentifier(byte[] Identifier) public static bool IsDocumentUniqueIdentifier(byte[] Identifier)
@@ -2,10 +2,7 @@
using Disco.Models.Repository; using Disco.Models.Repository;
using Disco.Services.Documents; using Disco.Services.Documents;
using System; using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks;
namespace Disco.Services namespace Disco.Services
{ {
@@ -34,9 +34,9 @@ namespace Disco.Services.Documents.ManagedGroups
private DocumentTemplateDevicesManagedGroup(string Key, ADManagedGroupConfiguration Configuration, DocumentTemplate DocumentTemplate) private DocumentTemplateDevicesManagedGroup(string Key, ADManagedGroupConfiguration Configuration, DocumentTemplate DocumentTemplate)
: base(Key, Configuration) : base(Key, Configuration)
{ {
this.DocumentTemplateId = DocumentTemplate.Id; DocumentTemplateId = DocumentTemplate.Id;
this.DocumentTemplateDescription = DocumentTemplate.Description; DocumentTemplateDescription = DocumentTemplate.Description;
this.DocumentTemplateScope = DocumentTemplate.Scope; DocumentTemplateScope = DocumentTemplate.Scope;
} }
public override void Initialize() public override void Initialize()
@@ -160,7 +160,7 @@ namespace Disco.Services.Documents.ManagedGroups
if (Configuration.FilterBeginDate.HasValue) if (Configuration.FilterBeginDate.HasValue)
{ {
return Database.Devices return Database.Devices
.Where(d => d.DeviceDomainId != null && d.DeviceAttachments.Any(a => a.DocumentTemplateId == this.DocumentTemplateId && a.Timestamp >= Configuration.FilterBeginDate)) .Where(d => d.DeviceDomainId != null && d.DeviceAttachments.Any(a => a.DocumentTemplateId == DocumentTemplateId && a.Timestamp >= Configuration.FilterBeginDate))
.Select(d => d.DeviceDomainId) .Select(d => d.DeviceDomainId)
.ToList() .ToList()
.Where(ActiveDirectory.IsValidDomainAccountId) .Where(ActiveDirectory.IsValidDomainAccountId)
@@ -169,7 +169,7 @@ namespace Disco.Services.Documents.ManagedGroups
else else
{ {
return Database.Devices return Database.Devices
.Where(d => d.DeviceDomainId != null && d.DeviceAttachments.Any(a => a.DocumentTemplateId == this.DocumentTemplateId)) .Where(d => d.DeviceDomainId != null && d.DeviceAttachments.Any(a => a.DocumentTemplateId == DocumentTemplateId))
.Select(d => d.DeviceDomainId) .Select(d => d.DeviceDomainId)
.ToList() .ToList()
.Where(ActiveDirectory.IsValidDomainAccountId) .Where(ActiveDirectory.IsValidDomainAccountId)
@@ -179,7 +179,7 @@ namespace Disco.Services.Documents.ManagedGroups
if (Configuration.FilterBeginDate.HasValue) if (Configuration.FilterBeginDate.HasValue)
{ {
return Database.Jobs return Database.Jobs
.Where(j => j.Device.DeviceDomainId != null && j.JobAttachments.Any(a => a.DocumentTemplateId == this.DocumentTemplateId && a.Timestamp >= Configuration.FilterBeginDate)) .Where(j => j.Device.DeviceDomainId != null && j.JobAttachments.Any(a => a.DocumentTemplateId == DocumentTemplateId && a.Timestamp >= Configuration.FilterBeginDate))
.Select(j => j.Device.DeviceDomainId) .Select(j => j.Device.DeviceDomainId)
.Distinct() .Distinct()
.ToList() .ToList()
@@ -189,7 +189,7 @@ namespace Disco.Services.Documents.ManagedGroups
else else
{ {
return Database.Jobs return Database.Jobs
.Where(j => j.Device.DeviceDomainId != null && j.JobAttachments.Any(a => a.DocumentTemplateId == this.DocumentTemplateId)) .Where(j => j.Device.DeviceDomainId != null && j.JobAttachments.Any(a => a.DocumentTemplateId == DocumentTemplateId))
.Select(j => j.Device.DeviceDomainId) .Select(j => j.Device.DeviceDomainId)
.Distinct() .Distinct()
.ToList() .ToList()
@@ -200,7 +200,7 @@ namespace Disco.Services.Documents.ManagedGroups
if (Configuration.FilterBeginDate.HasValue) if (Configuration.FilterBeginDate.HasValue)
{ {
return Database.Users return Database.Users
.Where(u => u.UserAttachments.Any(a => a.DocumentTemplateId == this.DocumentTemplateId && a.Timestamp >= Configuration.FilterBeginDate)) .Where(u => u.UserAttachments.Any(a => a.DocumentTemplateId == DocumentTemplateId && a.Timestamp >= Configuration.FilterBeginDate))
.SelectMany(u => u.DeviceUserAssignments.Where(dua => !dua.UnassignedDate.HasValue && dua.Device.DeviceDomainId != null), (u, dua) => dua.Device.DeviceDomainId) .SelectMany(u => u.DeviceUserAssignments.Where(dua => !dua.UnassignedDate.HasValue && dua.Device.DeviceDomainId != null), (u, dua) => dua.Device.DeviceDomainId)
.ToList() .ToList()
.Where(ActiveDirectory.IsValidDomainAccountId) .Where(ActiveDirectory.IsValidDomainAccountId)
@@ -209,7 +209,7 @@ namespace Disco.Services.Documents.ManagedGroups
else else
{ {
return Database.Users return Database.Users
.Where(u => u.UserAttachments.Any(a => a.DocumentTemplateId == this.DocumentTemplateId)) .Where(u => u.UserAttachments.Any(a => a.DocumentTemplateId == DocumentTemplateId))
.SelectMany(u => u.DeviceUserAssignments.Where(dua => !dua.UnassignedDate.HasValue && dua.Device.DeviceDomainId != null), (u, dua) => dua.Device.DeviceDomainId) .SelectMany(u => u.DeviceUserAssignments.Where(dua => !dua.UnassignedDate.HasValue && dua.Device.DeviceDomainId != null), (u, dua) => dua.Device.DeviceDomainId)
.ToList() .ToList()
.Where(ActiveDirectory.IsValidDomainAccountId) .Where(ActiveDirectory.IsValidDomainAccountId)
@@ -229,14 +229,14 @@ namespace Disco.Services.Documents.ManagedGroups
{ {
result = Database.Devices result = Database.Devices
.Where(d => d.SerialNumber == DeviceSerialNumber && d.DeviceDomainId != null) .Where(d => d.SerialNumber == DeviceSerialNumber && d.DeviceDomainId != null)
.Select(d => Tuple.Create(d.DeviceDomainId, d.DeviceAttachments.Any(a => a.DocumentTemplateId == this.DocumentTemplateId && a.Timestamp >= Configuration.FilterBeginDate))) .Select(d => Tuple.Create(d.DeviceDomainId, d.DeviceAttachments.Any(a => a.DocumentTemplateId == DocumentTemplateId && a.Timestamp >= Configuration.FilterBeginDate)))
.FirstOrDefault(); .FirstOrDefault();
} }
else else
{ {
result = Database.Devices result = Database.Devices
.Where(d => d.SerialNumber == DeviceSerialNumber && d.DeviceDomainId != null) .Where(d => d.SerialNumber == DeviceSerialNumber && d.DeviceDomainId != null)
.Select(d => Tuple.Create(d.DeviceDomainId, d.DeviceAttachments.Any(a => a.DocumentTemplateId == this.DocumentTemplateId))) .Select(d => Tuple.Create(d.DeviceDomainId, d.DeviceAttachments.Any(a => a.DocumentTemplateId == DocumentTemplateId)))
.FirstOrDefault(); .FirstOrDefault();
} }
@@ -295,7 +295,7 @@ namespace Disco.Services.Documents.ManagedGroups
.Select(j => new Tuple<string, string, bool>( .Select(j => new Tuple<string, string, bool>(
j.Device.DeviceDomainId, j.Device.DeviceDomainId,
j.Device.SerialNumber, j.Device.SerialNumber,
j.Device.Jobs.Any(dj => dj.JobAttachments.Any(a => a.DocumentTemplateId == this.DocumentTemplateId && a.Timestamp >= Configuration.FilterBeginDate)))) j.Device.Jobs.Any(dj => dj.JobAttachments.Any(a => a.DocumentTemplateId == DocumentTemplateId && a.Timestamp >= Configuration.FilterBeginDate))))
.FirstOrDefault(); .FirstOrDefault();
} }
else else
@@ -305,7 +305,7 @@ namespace Disco.Services.Documents.ManagedGroups
.Select(j => new Tuple<string, string, bool>( .Select(j => new Tuple<string, string, bool>(
j.Device.DeviceDomainId, j.Device.DeviceDomainId,
j.Device.SerialNumber, j.Device.SerialNumber,
j.Device.Jobs.Any(dj => dj.JobAttachments.Any(a => a.DocumentTemplateId == this.DocumentTemplateId)))) j.Device.Jobs.Any(dj => dj.JobAttachments.Any(a => a.DocumentTemplateId == DocumentTemplateId))))
.FirstOrDefault(); .FirstOrDefault();
} }
@@ -372,7 +372,7 @@ namespace Disco.Services.Documents.ManagedGroups
result = Database.Users result = Database.Users
.Where(u => u.UserId == UserId) .Where(u => u.UserId == UserId)
.Select(u => Tuple.Create( .Select(u => Tuple.Create(
u.UserAttachments.Any(a => a.DocumentTemplateId == this.DocumentTemplateId && a.Timestamp >= Configuration.FilterBeginDate), u.UserAttachments.Any(a => a.DocumentTemplateId == DocumentTemplateId && a.Timestamp >= Configuration.FilterBeginDate),
u.DeviceUserAssignments u.DeviceUserAssignments
.Where(dua => !dua.UnassignedDate.HasValue && dua.Device.DeviceDomainId != null) .Where(dua => !dua.UnassignedDate.HasValue && dua.Device.DeviceDomainId != null)
.Select(dua => new Tuple<string, string>(dua.Device.DeviceDomainId, dua.Device.SerialNumber)))) .Select(dua => new Tuple<string, string>(dua.Device.DeviceDomainId, dua.Device.SerialNumber))))
@@ -383,7 +383,7 @@ namespace Disco.Services.Documents.ManagedGroups
result = Database.Users result = Database.Users
.Where(u => u.UserId == UserId) .Where(u => u.UserId == UserId)
.Select(u => Tuple.Create( .Select(u => Tuple.Create(
u.UserAttachments.Any(a => a.DocumentTemplateId == this.DocumentTemplateId), u.UserAttachments.Any(a => a.DocumentTemplateId == DocumentTemplateId),
u.DeviceUserAssignments u.DeviceUserAssignments
.Where(dua => !dua.UnassignedDate.HasValue && dua.Device.DeviceDomainId != null) .Where(dua => !dua.UnassignedDate.HasValue && dua.Device.DeviceDomainId != null)
.Select(dua => new Tuple<string, string>(dua.Device.DeviceDomainId, dua.Device.SerialNumber)))) .Select(dua => new Tuple<string, string>(dua.Device.DeviceDomainId, dua.Device.SerialNumber))))
@@ -458,13 +458,13 @@ namespace Disco.Services.Documents.ManagedGroups
{ {
jobsHaveTemplate = e.Database.Jobs jobsHaveTemplate = e.Database.Jobs
.Where(j => j.DeviceSerialNumber == deviceSerialNumber) .Where(j => j.DeviceSerialNumber == deviceSerialNumber)
.Any(j => j.JobAttachments.Any(a => a.DocumentTemplateId == this.DocumentTemplateId && a.Timestamp >= Configuration.FilterBeginDate)); .Any(j => j.JobAttachments.Any(a => a.DocumentTemplateId == DocumentTemplateId && a.Timestamp >= Configuration.FilterBeginDate));
} }
else else
{ {
jobsHaveTemplate = e.Database.Jobs jobsHaveTemplate = e.Database.Jobs
.Where(j => j.DeviceSerialNumber == deviceSerialNumber) .Where(j => j.DeviceSerialNumber == deviceSerialNumber)
.Any(j => j.JobAttachments.Any(a => a.DocumentTemplateId == this.DocumentTemplateId)); .Any(j => j.JobAttachments.Any(a => a.DocumentTemplateId == DocumentTemplateId));
} }
if (jobsHaveTemplate) if (jobsHaveTemplate)
@@ -482,14 +482,14 @@ namespace Disco.Services.Documents.ManagedGroups
userHasTemplate = e.Database.Devices userHasTemplate = e.Database.Devices
.Where(d => d.SerialNumber == deviceSerialNumber) .Where(d => d.SerialNumber == deviceSerialNumber)
.Select(d => d.AssignedUser) .Select(d => d.AssignedUser)
.Any(u => u.UserAttachments.Any(a => a.DocumentTemplateId == this.DocumentTemplateId && a.Timestamp >= Configuration.FilterBeginDate)); .Any(u => u.UserAttachments.Any(a => a.DocumentTemplateId == DocumentTemplateId && a.Timestamp >= Configuration.FilterBeginDate));
} }
else else
{ {
userHasTemplate = e.Database.Devices userHasTemplate = e.Database.Devices
.Where(d => d.SerialNumber == deviceSerialNumber) .Where(d => d.SerialNumber == deviceSerialNumber)
.Select(d => d.AssignedUser) .Select(d => d.AssignedUser)
.Any(u => u.UserAttachments.Any(a => a.DocumentTemplateId == this.DocumentTemplateId)); .Any(u => u.UserAttachments.Any(a => a.DocumentTemplateId == DocumentTemplateId));
} }
if (userHasTemplate) if (userHasTemplate)
@@ -526,13 +526,13 @@ namespace Disco.Services.Documents.ManagedGroups
if (Configuration.FilterBeginDate.HasValue) if (Configuration.FilterBeginDate.HasValue)
{ {
previousUserHasTemplate = e.Database.Users previousUserHasTemplate = e.Database.Users
.Where(u => u.UserId == devicePreviousAssignedUserId && u.UserAttachments.Any(ua => ua.DocumentTemplateId == this.DocumentTemplateId && ua.Timestamp >= Configuration.FilterBeginDate)) .Where(u => u.UserId == devicePreviousAssignedUserId && u.UserAttachments.Any(ua => ua.DocumentTemplateId == DocumentTemplateId && ua.Timestamp >= Configuration.FilterBeginDate))
.Any(); .Any();
} }
else else
{ {
previousUserHasTemplate = e.Database.Users previousUserHasTemplate = e.Database.Users
.Where(u => u.UserId == devicePreviousAssignedUserId && u.UserAttachments.Any(ua => ua.DocumentTemplateId == this.DocumentTemplateId)) .Where(u => u.UserId == devicePreviousAssignedUserId && u.UserAttachments.Any(ua => ua.DocumentTemplateId == DocumentTemplateId))
.Any(); .Any();
} }
} }
@@ -542,13 +542,13 @@ namespace Disco.Services.Documents.ManagedGroups
if (Configuration.FilterBeginDate.HasValue) if (Configuration.FilterBeginDate.HasValue)
{ {
currentUserHasTemplate = e.Database.Users currentUserHasTemplate = e.Database.Users
.Where(u => u.UserId == deviceCurrentAssignedUserId && u.UserAttachments.Any(ua => ua.DocumentTemplateId == this.DocumentTemplateId && ua.Timestamp >= Configuration.FilterBeginDate)) .Where(u => u.UserId == deviceCurrentAssignedUserId && u.UserAttachments.Any(ua => ua.DocumentTemplateId == DocumentTemplateId && ua.Timestamp >= Configuration.FilterBeginDate))
.Any(); .Any();
} }
else else
{ {
currentUserHasTemplate = e.Database.Users currentUserHasTemplate = e.Database.Users
.Where(u => u.UserId == deviceCurrentAssignedUserId && u.UserAttachments.Any(ua => ua.DocumentTemplateId == this.DocumentTemplateId)) .Where(u => u.UserId == deviceCurrentAssignedUserId && u.UserAttachments.Any(ua => ua.DocumentTemplateId == DocumentTemplateId))
.Any(); .Any();
} }
} }
@@ -33,9 +33,9 @@ namespace Disco.Services.Documents.ManagedGroups
private DocumentTemplateUsersManagedGroup(string Key, ADManagedGroupConfiguration Configuration, DocumentTemplate DocumentTemplate) private DocumentTemplateUsersManagedGroup(string Key, ADManagedGroupConfiguration Configuration, DocumentTemplate DocumentTemplate)
: base(Key, Configuration) : base(Key, Configuration)
{ {
this.DocumentTemplateId = DocumentTemplate.Id; DocumentTemplateId = DocumentTemplate.Id;
this.DocumentTemplateDescription = DocumentTemplate.Description; DocumentTemplateDescription = DocumentTemplate.Description;
this.DocumentTemplateScope = DocumentTemplate.Scope; DocumentTemplateScope = DocumentTemplate.Scope;
} }
public override void Initialize() public override void Initialize()
@@ -155,27 +155,27 @@ namespace Disco.Services.Documents.ManagedGroups
if (Configuration.FilterBeginDate.HasValue) if (Configuration.FilterBeginDate.HasValue)
{ {
return Database.Devices return Database.Devices
.Where(d => d.AssignedUserId != null && d.DeviceAttachments.Any(a => a.DocumentTemplateId == this.DocumentTemplateId && a.Timestamp >= Configuration.FilterBeginDate)) .Where(d => d.AssignedUserId != null && d.DeviceAttachments.Any(a => a.DocumentTemplateId == DocumentTemplateId && a.Timestamp >= Configuration.FilterBeginDate))
.Select(d => d.AssignedUserId); .Select(d => d.AssignedUserId);
} }
else else
{ {
return Database.Devices return Database.Devices
.Where(d => d.AssignedUserId != null && d.DeviceAttachments.Any(a => a.DocumentTemplateId == this.DocumentTemplateId)) .Where(d => d.AssignedUserId != null && d.DeviceAttachments.Any(a => a.DocumentTemplateId == DocumentTemplateId))
.Select(d => d.AssignedUserId); .Select(d => d.AssignedUserId);
} }
case DocumentTemplate.DocumentTemplateScopes.Job: case DocumentTemplate.DocumentTemplateScopes.Job:
if (Configuration.FilterBeginDate.HasValue) if (Configuration.FilterBeginDate.HasValue)
{ {
return Database.Jobs return Database.Jobs
.Where(j => j.UserId != null && j.JobAttachments.Any(a => a.DocumentTemplateId == this.DocumentTemplateId && a.Timestamp >= Configuration.FilterBeginDate)) .Where(j => j.UserId != null && j.JobAttachments.Any(a => a.DocumentTemplateId == DocumentTemplateId && a.Timestamp >= Configuration.FilterBeginDate))
.Select(j => j.UserId) .Select(j => j.UserId)
.Distinct(); .Distinct();
} }
else else
{ {
return Database.Jobs return Database.Jobs
.Where(j => j.UserId != null && j.JobAttachments.Any(a => a.DocumentTemplateId == this.DocumentTemplateId)) .Where(j => j.UserId != null && j.JobAttachments.Any(a => a.DocumentTemplateId == DocumentTemplateId))
.Select(j => j.UserId) .Select(j => j.UserId)
.Distinct(); .Distinct();
} }
@@ -183,13 +183,13 @@ namespace Disco.Services.Documents.ManagedGroups
if (Configuration.FilterBeginDate.HasValue) if (Configuration.FilterBeginDate.HasValue)
{ {
return Database.Users return Database.Users
.Where(u => u.UserAttachments.Any(a => a.DocumentTemplateId == this.DocumentTemplateId && a.Timestamp >= Configuration.FilterBeginDate)) .Where(u => u.UserAttachments.Any(a => a.DocumentTemplateId == DocumentTemplateId && a.Timestamp >= Configuration.FilterBeginDate))
.Select(u => u.UserId); .Select(u => u.UserId);
} }
else else
{ {
return Database.Users return Database.Users
.Where(u => u.UserAttachments.Any(a => a.DocumentTemplateId == this.DocumentTemplateId)) .Where(u => u.UserAttachments.Any(a => a.DocumentTemplateId == DocumentTemplateId))
.Select(u => u.UserId); .Select(u => u.UserId);
} }
default: default:
@@ -208,7 +208,7 @@ namespace Disco.Services.Documents.ManagedGroups
.Where(d => d.SerialNumber == DeviceSerialNumber && d.AssignedUser != null) .Where(d => d.SerialNumber == DeviceSerialNumber && d.AssignedUser != null)
.Select(d => Tuple.Create( .Select(d => Tuple.Create(
d.AssignedUserId, d.AssignedUserId,
d.DeviceAttachments.Any(a => a.DocumentTemplateId == this.DocumentTemplateId && a.Timestamp >= Configuration.FilterBeginDate))) d.DeviceAttachments.Any(a => a.DocumentTemplateId == DocumentTemplateId && a.Timestamp >= Configuration.FilterBeginDate)))
.FirstOrDefault(); .FirstOrDefault();
} }
else else
@@ -217,7 +217,7 @@ namespace Disco.Services.Documents.ManagedGroups
.Where(d => d.SerialNumber == DeviceSerialNumber && d.AssignedUser != null) .Where(d => d.SerialNumber == DeviceSerialNumber && d.AssignedUser != null)
.Select(d => Tuple.Create( .Select(d => Tuple.Create(
d.AssignedUserId, d.AssignedUserId,
d.DeviceAttachments.Any(a => a.DocumentTemplateId == this.DocumentTemplateId))) d.DeviceAttachments.Any(a => a.DocumentTemplateId == DocumentTemplateId)))
.FirstOrDefault(); .FirstOrDefault();
} }
@@ -270,7 +270,7 @@ namespace Disco.Services.Documents.ManagedGroups
.Where(j => j.Id == JobId && j.UserId != null) .Where(j => j.Id == JobId && j.UserId != null)
.Select(j => Tuple.Create( .Select(j => Tuple.Create(
j.UserId, j.UserId,
j.User.Jobs.Any(uj => uj.JobAttachments.Any(a => a.DocumentTemplateId == this.DocumentTemplateId && a.Timestamp >= Configuration.FilterBeginDate)))) j.User.Jobs.Any(uj => uj.JobAttachments.Any(a => a.DocumentTemplateId == DocumentTemplateId && a.Timestamp >= Configuration.FilterBeginDate))))
.FirstOrDefault(); .FirstOrDefault();
} }
else else
@@ -279,7 +279,7 @@ namespace Disco.Services.Documents.ManagedGroups
.Where(j => j.Id == JobId && j.UserId != null) .Where(j => j.Id == JobId && j.UserId != null)
.Select(j => Tuple.Create( .Select(j => Tuple.Create(
j.UserId, j.UserId,
j.User.Jobs.Any(uj => uj.JobAttachments.Any(a => a.DocumentTemplateId == this.DocumentTemplateId)))) j.User.Jobs.Any(uj => uj.JobAttachments.Any(a => a.DocumentTemplateId == DocumentTemplateId))))
.FirstOrDefault(); .FirstOrDefault();
} }
@@ -328,13 +328,13 @@ namespace Disco.Services.Documents.ManagedGroups
{ {
return Database.Users return Database.Users
.Where(u => u.UserId == UserId) .Where(u => u.UserId == UserId)
.Any(u => u.UserAttachments.Any(a => a.DocumentTemplateId == this.DocumentTemplateId && a.Timestamp >= Configuration.FilterBeginDate)); .Any(u => u.UserAttachments.Any(a => a.DocumentTemplateId == DocumentTemplateId && a.Timestamp >= Configuration.FilterBeginDate));
} }
else else
{ {
return Database.Users return Database.Users
.Where(u => u.UserId == UserId) .Where(u => u.UserId == UserId)
.Any(u => u.UserAttachments.Any(a => a.DocumentTemplateId == this.DocumentTemplateId)); .Any(u => u.UserAttachments.Any(a => a.DocumentTemplateId == DocumentTemplateId));
} }
} }
@@ -369,13 +369,13 @@ namespace Disco.Services.Documents.ManagedGroups
if (Configuration.FilterBeginDate.HasValue) if (Configuration.FilterBeginDate.HasValue)
{ {
relevantDevice = Event.Database.Devices relevantDevice = Event.Database.Devices
.Where(d => d.SerialNumber == deviceSerialNumber && d.DeviceAttachments.Any(ja => ja.DocumentTemplateId == this.DocumentTemplateId && ja.Timestamp >= Configuration.FilterBeginDate)) .Where(d => d.SerialNumber == deviceSerialNumber && d.DeviceAttachments.Any(ja => ja.DocumentTemplateId == DocumentTemplateId && ja.Timestamp >= Configuration.FilterBeginDate))
.Any(); .Any();
} }
else else
{ {
relevantDevice = Event.Database.Devices relevantDevice = Event.Database.Devices
.Where(d => d.SerialNumber == deviceSerialNumber && d.DeviceAttachments.Any(ja => ja.DocumentTemplateId == this.DocumentTemplateId)) .Where(d => d.SerialNumber == deviceSerialNumber && d.DeviceAttachments.Any(ja => ja.DocumentTemplateId == DocumentTemplateId))
.Any(); .Any();
} }
@@ -22,7 +22,7 @@ namespace Disco.Services.Expressions
return null; return null;
else else
if (_EvaluateParseException == null) if (_EvaluateParseException == null)
_EvaluateParseException = EvaluateExpressionParseException.FromRecognitionException(_ExpressionParseException, this.Source); _EvaluateParseException = EvaluateExpressionParseException.FromRecognitionException(_ExpressionParseException, Source);
return _EvaluateParseException; return _EvaluateParseException;
} }
} }
@@ -44,38 +44,38 @@ namespace Disco.Services.Expressions
public EvaluateExpressionPart(string Source) public EvaluateExpressionPart(string Source)
{ {
this.RawSource = Source; RawSource = Source;
if (Source.StartsWith("{") && Source.EndsWith("}")) if (Source.StartsWith("{") && Source.EndsWith("}"))
Source = Source.Substring(1, Source.Length - 2); Source = Source.Substring(1, Source.Length - 2);
if (Source[0] == '~') if (Source[0] == '~')
{ {
this.ErrorsAllowed = true; ErrorsAllowed = true;
this.Source = Source.Substring(1); this.Source = Source.Substring(1);
} }
else else
{ {
this.ErrorsAllowed = false; ErrorsAllowed = false;
this.Source = Source; this.Source = Source;
} }
try try
{ {
this._Expression = Spring.Expressions.Expression.Parse(this.Source); _Expression = Spring.Expressions.Expression.Parse(this.Source);
} }
catch (RecognitionException ex) catch (RecognitionException ex)
{ {
this._ExpressionParseException = ex; _ExpressionParseException = ex;
} }
} }
object IExpressionPart.Evaluate(object ExpressionContext, IDictionary Variables) object IExpressionPart.Evaluate(object ExpressionContext, IDictionary Variables)
{ {
if (this._ExpressionParseException == null) if (_ExpressionParseException == null)
{ {
return this._Expression.GetValue(ExpressionContext, Variables); return _Expression.GetValue(ExpressionContext, Variables);
} }
throw this._ExpressionParseException; throw _ExpressionParseException;
} }
} }
+1 -1
View File
@@ -36,7 +36,7 @@ namespace Disco.Services.Expressions
public T EvaluateFirst<T>(object ExpressionContext, IDictionary Variables) public T EvaluateFirst<T>(object ExpressionContext, IDictionary Variables)
{ {
T result = default(T); T result = default(T);
if (this.Count > 0) if (Count > 0)
{ {
try try
{ {
@@ -19,7 +19,7 @@ namespace Disco.Services.Expressions
// Run in Background 5 Second after Scheduled (on App Startup) // Run in Background 5 Second after Scheduled (on App Startup)
TriggerBuilder triggerBuilder = TriggerBuilder.Create().StartAt(new DateTimeOffset(DateTime.Now).AddSeconds(5)); TriggerBuilder triggerBuilder = TriggerBuilder.Create().StartAt(new DateTimeOffset(DateTime.Now).AddSeconds(5));
this.ScheduleTask(triggerBuilder); ScheduleTask(triggerBuilder);
} }
protected override void ExecuteTask() protected override void ExecuteTask()
@@ -15,10 +15,10 @@ namespace Disco.Services.Expressions.Extensions.ImageResultImplementations
public BaseImageExpressionResult() public BaseImageExpressionResult()
{ {
this.LosslessFormat = false; LosslessFormat = false;
this.Quality = 90; Quality = 90;
this.ShowField = false; ShowField = false;
this.BackgroundPreferTransparent = true; BackgroundPreferTransparent = true;
} }
public abstract Stream GetImage(int Width, int Height); public abstract Stream GetImage(int Width, int Height);
@@ -35,10 +35,10 @@ namespace Disco.Services.Expressions.Extensions.ImageResultImplementations
Brush backgroundBrush = null; Brush backgroundBrush = null;
if (!LosslessFormat || !BackgroundPreferTransparent) if (!LosslessFormat || !BackgroundPreferTransparent)
{ {
if (string.IsNullOrEmpty(this.BackgroundColour)) if (string.IsNullOrEmpty(BackgroundColour))
backgroundBrush = Brushes.White; backgroundBrush = Brushes.White;
else else
backgroundBrush = new SolidBrush(ColorTranslator.FromHtml(this.BackgroundColour)); backgroundBrush = new SolidBrush(ColorTranslator.FromHtml(BackgroundColour));
} }
using (Image resizedImage = SourceImage.ResizeImage(Width, Height, backgroundBrush)) using (Image resizedImage = SourceImage.ResizeImage(Width, Height, backgroundBrush))
@@ -56,7 +56,7 @@ namespace Disco.Services.Expressions.Extensions.ImageResultImplementations
} }
else else
{ // Lossy Format - JPG { // Lossy Format - JPG
byte quality = Math.Min((byte)100, Math.Max((byte)1, this.Quality)); byte quality = Math.Min((byte)100, Math.Max((byte)1, Quality));
SourceImage.SaveJpg(quality, imageStream); SourceImage.SaveJpg(quality, imageStream);
} }
imageStream.Position = 0; imageStream.Position = 0;
@@ -18,7 +18,7 @@ namespace Disco.Services.Expressions.Extensions.ImageResultImplementations
public override Stream GetImage(int Width, int Height) public override Stream GetImage(int Width, int Height)
{ {
return this.RenderImage(this.Image, Width, Height); return RenderImage(Image, Width, Height);
} }
} }
} }
@@ -20,9 +20,9 @@ namespace Disco.Services.Expressions.Extensions.ImageResultImplementations
public override Stream GetImage(int Width, int Height) public override Stream GetImage(int Width, int Height)
{ {
using (Image SourceImage = Bitmap.FromFile(this.AbsoluteFilePath)) using (Image SourceImage = Bitmap.FromFile(AbsoluteFilePath))
{ {
return this.RenderImage(SourceImage, Width, Height); return RenderImage(SourceImage, Width, Height);
} }
} }
} }
@@ -23,8 +23,8 @@ namespace Disco.Services.Expressions.Extensions.ImageResultImplementations
throw new ArgumentException("AbsoluteFilePaths is empty", "AbsoluteFilePaths"); throw new ArgumentException("AbsoluteFilePaths is empty", "AbsoluteFilePaths");
this.AbsoluteFilePaths = AbsoluteFilePaths; this.AbsoluteFilePaths = AbsoluteFilePaths;
this.MontageTableLayout = true; MontageTableLayout = true;
this.Padding = 4; Padding = 4;
} }
public override Stream GetImage(int Width, int Height) public override Stream GetImage(int Width, int Height)
@@ -33,7 +33,7 @@ namespace Disco.Services.Expressions.Extensions.ImageResultImplementations
try try
{ {
// Load Images // Load Images
foreach (string imageFilePath in this.AbsoluteFilePaths) foreach (string imageFilePath in AbsoluteFilePaths)
Images.Add(Bitmap.FromFile(imageFilePath)); Images.Add(Bitmap.FromFile(imageFilePath));
// Build Montage // Build Montage
@@ -49,21 +49,21 @@ namespace Disco.Services.Expressions.Extensions.ImageResultImplementations
if (!LosslessFormat || !BackgroundPreferTransparent) if (!LosslessFormat || !BackgroundPreferTransparent)
{ {
Brush backgroundBrush = Brushes.White; Brush backgroundBrush = Brushes.White;
if (!string.IsNullOrEmpty(this.BackgroundColour)) if (!string.IsNullOrEmpty(BackgroundColour))
backgroundBrush = new SolidBrush(ColorTranslator.FromHtml(this.BackgroundColour)); backgroundBrush = new SolidBrush(ColorTranslator.FromHtml(BackgroundColour));
montageGraphics.FillRectangle(backgroundBrush, montageGraphics.VisibleClipBounds); montageGraphics.FillRectangle(backgroundBrush, montageGraphics.VisibleClipBounds);
} }
if (this.MontageHorizontalLayout) if (MontageHorizontalLayout)
DoHorizontalLayout(Images, montageGraphics); DoHorizontalLayout(Images, montageGraphics);
else else
if (this.MontageVerticalLayout) if (MontageVerticalLayout)
DoVirticalLayout(Images, montageGraphics); DoVirticalLayout(Images, montageGraphics);
else else
DoTableLayout(Images, montageGraphics); DoTableLayout(Images, montageGraphics);
} }
return this.OutputImage(montageImage); return OutputImage(montageImage);
} }
} }
catch (Exception) { throw; } catch (Exception) { throw; }
@@ -83,7 +83,7 @@ namespace Disco.Services.Expressions.Extensions.ImageResultImplementations
float imagePosition = 0; float imagePosition = 0;
int imagesWidthTotal = Images.Sum(i => i.Width); int imagesWidthTotal = Images.Sum(i => i.Width);
int imagesHeightMax = Images.Max(i => i.Height); int imagesHeightMax = Images.Max(i => i.Height);
int imagesPadding = ((Images.Count - 1) * this.Padding); int imagesPadding = ((Images.Count - 1) * Padding);
imageScale = (float)(MontageGraphics.VisibleClipBounds.Width - imagesPadding) / (float)imagesWidthTotal; imageScale = (float)(MontageGraphics.VisibleClipBounds.Width - imagesPadding) / (float)imagesWidthTotal;
if ((MontageGraphics.VisibleClipBounds.Height / (float)imagesHeightMax) < imageScale) if ((MontageGraphics.VisibleClipBounds.Height / (float)imagesHeightMax) < imageScale)
@@ -91,7 +91,7 @@ namespace Disco.Services.Expressions.Extensions.ImageResultImplementations
foreach (Image image in Images) foreach (Image image in Images)
{ {
MontageGraphics.DrawImageResized(image, imageScale, imagePosition, 0); MontageGraphics.DrawImageResized(image, imageScale, imagePosition, 0);
imagePosition += (imageScale * image.Width) + this.Padding; imagePosition += (imageScale * image.Width) + Padding;
} }
} }
private void DoVirticalLayout(List<Image> Images, Graphics MontageGraphics) private void DoVirticalLayout(List<Image> Images, Graphics MontageGraphics)
@@ -100,7 +100,7 @@ namespace Disco.Services.Expressions.Extensions.ImageResultImplementations
float imagePosition = 0; float imagePosition = 0;
int imagesWidthMax = Images.Max(i => i.Width); int imagesWidthMax = Images.Max(i => i.Width);
int imagesHeightTotal = Images.Sum(i => i.Height); int imagesHeightTotal = Images.Sum(i => i.Height);
int imagesPadding = ((Images.Count - 1) * this.Padding); int imagesPadding = ((Images.Count - 1) * Padding);
imageScale = (float)(MontageGraphics.VisibleClipBounds.Height - imagesPadding) / (float)imagesHeightTotal; imageScale = (float)(MontageGraphics.VisibleClipBounds.Height - imagesPadding) / (float)imagesHeightTotal;
if ((MontageGraphics.VisibleClipBounds.Width / (float)imagesWidthMax) < imageScale) if ((MontageGraphics.VisibleClipBounds.Width / (float)imagesWidthMax) < imageScale)
@@ -108,7 +108,7 @@ namespace Disco.Services.Expressions.Extensions.ImageResultImplementations
foreach (Image image in Images) foreach (Image image in Images)
{ {
MontageGraphics.DrawImageResized(image, imageScale, 0, imagePosition); MontageGraphics.DrawImageResized(image, imageScale, 0, imagePosition);
imagePosition += (imageScale * image.Height) + this.Padding; imagePosition += (imageScale * image.Height) + Padding;
} }
} }
private void DoTableLayout(List<Image> Images, Graphics MontageGraphics) private void DoTableLayout(List<Image> Images, Graphics MontageGraphics)
@@ -118,8 +118,8 @@ namespace Disco.Services.Expressions.Extensions.ImageResultImplementations
var calculatedLayout = CalculateColumnCount(stageSize, itemAverageSize, Images.Count); var calculatedLayout = CalculateColumnCount(stageSize, itemAverageSize, Images.Count);
SizeF cellSize = new SizeF((MontageGraphics.VisibleClipBounds.Width - ((calculatedLayout.Item1 - 1) * this.Padding)) / calculatedLayout.Item1, SizeF cellSize = new SizeF((MontageGraphics.VisibleClipBounds.Width - ((calculatedLayout.Item1 - 1) * Padding)) / calculatedLayout.Item1,
(MontageGraphics.VisibleClipBounds.Height - ((calculatedLayout.Item2 - 1) * this.Padding)) / calculatedLayout.Item2); (MontageGraphics.VisibleClipBounds.Height - ((calculatedLayout.Item2 - 1) * Padding)) / calculatedLayout.Item2);
int imageIndex = 0; int imageIndex = 0;
for (int rowIndex = 0; rowIndex < calculatedLayout.Item2; rowIndex++) for (int rowIndex = 0; rowIndex < calculatedLayout.Item2; rowIndex++)
@@ -129,7 +129,7 @@ namespace Disco.Services.Expressions.Extensions.ImageResultImplementations
if (imageIndex < Images.Count) if (imageIndex < Images.Count)
{ {
var image = Images[imageIndex]; var image = Images[imageIndex];
var cellPoint = new PointF((cellSize.Width * columnIndex) + (this.Padding * columnIndex), (cellSize.Height * rowIndex) + (this.Padding * rowIndex)); var cellPoint = new PointF((cellSize.Width * columnIndex) + (Padding * columnIndex), (cellSize.Height * rowIndex) + (Padding * rowIndex));
MontageGraphics.Clip = new Region(new RectangleF(cellPoint, cellSize)); MontageGraphics.Clip = new Region(new RectangleF(cellPoint, cellSize));
MontageGraphics.DrawImageResized(image); MontageGraphics.DrawImageResized(image);
imageIndex++; imageIndex++;
@@ -151,8 +151,8 @@ namespace Disco.Services.Expressions.Extensions.ImageResultImplementations
{ {
int rowCount = (int)Math.Ceiling((double)ItemCount / (double)columnCount); int rowCount = (int)Math.Ceiling((double)ItemCount / (double)columnCount);
int requiredWidthPadding = (columnCount - 1) * this.Padding; int requiredWidthPadding = (columnCount - 1) * Padding;
int requiredHeightPadding = (rowCount - 1) * this.Padding; int requiredHeightPadding = (rowCount - 1) * Padding;
Size usableStageSize = new Size(StageSize.Width - requiredWidthPadding, StageSize.Height - requiredHeightPadding); Size usableStageSize = new Size(StageSize.Width - requiredWidthPadding, StageSize.Height - requiredHeightPadding);
double stageWidthRatio = (float)usableStageSize.Width / (float)usableStageSize.Height; double stageWidthRatio = (float)usableStageSize.Width / (float)usableStageSize.Height;
double stageHeightRatio = (float)usableStageSize.Height / (float)usableStageSize.Width; double stageHeightRatio = (float)usableStageSize.Height / (float)usableStageSize.Width;
@@ -1,6 +1,3 @@
using System;
using System.Collections;
namespace Disco.Services.Expressions namespace Disco.Services.Expressions
{ {
public class TextExpressionPart : IExpressionPart public class TextExpressionPart : IExpressionPart
@@ -22,7 +19,7 @@ namespace Disco.Services.Expressions
{ {
get get
{ {
return this._Source; return _Source;
} }
set set
{ {
@@ -33,7 +30,7 @@ namespace Disco.Services.Expressions
{ {
get get
{ {
return this._Source; return _Source;
} }
set set
{ {
@@ -63,11 +60,11 @@ namespace Disco.Services.Expressions
public TextExpressionPart(string Source) public TextExpressionPart(string Source)
{ {
this._Source = Source; _Source = Source;
} }
object IExpressionPart.Evaluate(object ExpressionContext, System.Collections.IDictionary Variables) object IExpressionPart.Evaluate(object ExpressionContext, System.Collections.IDictionary Variables)
{ {
return this._Source; return _Source;
} }
} }
@@ -1,8 +1,4 @@
using System; using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Disco namespace Disco
{ {
@@ -1,8 +1,4 @@
using System; using System.Collections.Generic;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Disco namespace Disco
{ {
@@ -1,8 +1,6 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Disco namespace Disco
{ {
-2
View File
@@ -2,8 +2,6 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Collections.ObjectModel; using System.Collections.ObjectModel;
using System.Linq; using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Disco.Services.Extensions namespace Disco.Services.Extensions
{ {
@@ -52,7 +52,7 @@ namespace Disco.Services.Interop.ActiveDirectory
var trigger = TriggerBuilder.Create() var trigger = TriggerBuilder.Create()
.StartAt(DateTimeOffset.Now.AddMinutes(3)); .StartAt(DateTimeOffset.Now.AddMinutes(3));
this.ScheduleTask(trigger); ScheduleTask(trigger);
} }
} }
@@ -1,9 +1,5 @@
using System; using System;
using System.Collections.Generic;
using System.DirectoryServices; using System.DirectoryServices;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Disco.Services.Interop.ActiveDirectory namespace Disco.Services.Interop.ActiveDirectory
{ {
@@ -38,8 +34,8 @@ namespace Disco.Services.Interop.ActiveDirectory
public override string ToString() public override string ToString()
{ {
if (this.Entry != null) if (Entry != null)
return this.Entry.Path; return Entry.Path;
else else
return base.ToString(); return base.ToString();
} }
@@ -1,10 +1,8 @@
using Disco.Data.Repository; using Disco.Data.Repository;
using Disco.Services.Tasks; using Disco.Services.Tasks;
using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.DirectoryServices.ActiveDirectory; using System.DirectoryServices.ActiveDirectory;
using System.Linq; using System.Linq;
using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
namespace Disco.Services.Interop.ActiveDirectory namespace Disco.Services.Interop.ActiveDirectory
@@ -43,19 +43,19 @@ namespace Disco.Services.Interop.ActiveDirectory
public ADDomain(ActiveDirectoryContext Context, Domain Domain) public ADDomain(ActiveDirectoryContext Context, Domain Domain)
{ {
this.context = Context; context = Context;
this.Domain = Domain; this.Domain = Domain;
this.SearchContainers = null; SearchContainers = null;
this.domainControllers = null; domainControllers = null;
this.domainMaintenanceNext = DateTime.Now.AddMinutes(DomainMaintanceIntervalMinutes); domainMaintenanceNext = DateTime.Now.AddMinutes(DomainMaintanceIntervalMinutes);
this.Initialize(); Initialize();
} }
private void Initialize() private void Initialize()
{ {
this.Name = Domain.Name; Name = Domain.Name;
var dc = Domain.FindDomainController(); var dc = Domain.FindDomainController();
@@ -63,26 +63,26 @@ namespace Disco.Services.Interop.ActiveDirectory
using (var adRootDSE = new DirectoryEntry(ldapPath + "RootDSE")) using (var adRootDSE = new DirectoryEntry(ldapPath + "RootDSE"))
{ {
this.DistinguishedName = adRootDSE.Properties["defaultNamingContext"][0].ToString(); DistinguishedName = adRootDSE.Properties["defaultNamingContext"][0].ToString();
this.ConfigurationNamingContext = adRootDSE.Properties["configurationNamingContext"][0].ToString(); ConfigurationNamingContext = adRootDSE.Properties["configurationNamingContext"][0].ToString();
} }
using (var adDomainRoot = new DirectoryEntry(ldapPath + this.DistinguishedName)) using (var adDomainRoot = new DirectoryEntry(ldapPath + DistinguishedName))
{ {
this.SecurityIdentifier = new SecurityIdentifier((byte[])(adDomainRoot.Properties["objectSid"][0]), 0); SecurityIdentifier = new SecurityIdentifier((byte[])(adDomainRoot.Properties["objectSid"][0]), 0);
} }
using (var configSearchRoot = new DirectoryEntry(ldapPath + "CN=Partitions," + this.ConfigurationNamingContext)) using (var configSearchRoot = new DirectoryEntry(ldapPath + "CN=Partitions," + ConfigurationNamingContext))
{ {
var configSearchFilter = string.Format("(&(objectcategory=Crossref)(dnsRoot={0})(netBIOSName=*))", this.Name); var configSearchFilter = string.Format("(&(objectcategory=Crossref)(dnsRoot={0})(netBIOSName=*))", Name);
using (var configSearcher = new DirectorySearcher(configSearchRoot, configSearchFilter, new string[] { "NetBIOSName" }, System.DirectoryServices.SearchScope.OneLevel)) using (var configSearcher = new DirectorySearcher(configSearchRoot, configSearchFilter, new string[] { "NetBIOSName" }, System.DirectoryServices.SearchScope.OneLevel))
{ {
SearchResult configResult = configSearcher.FindOne(); SearchResult configResult = configSearcher.FindOne();
if (configResult != null) if (configResult != null)
this.NetBiosName = configResult.Properties["NetBIOSName"][0].ToString(); NetBiosName = configResult.Properties["NetBIOSName"][0].ToString();
else else
this.NetBiosName = null; NetBiosName = null;
} }
} }
} }
@@ -91,17 +91,17 @@ namespace Disco.Services.Interop.ActiveDirectory
public IEnumerable<ADDomainController> GetAllReachableDomainControllers() public IEnumerable<ADDomainController> GetAllReachableDomainControllers()
{ {
return this.Domain.FindAllDomainControllers().WhereReachable().Select(dc => new ADDomainController(this.context, dc, this, dc.SiteName == this.context.Site.Name, false)); return Domain.FindAllDomainControllers().WhereReachable().Select(dc => new ADDomainController(context, dc, this, dc.SiteName == context.Site.Name, false));
} }
public IEnumerable<ADDomainController> GetReachableSiteDomainControllers() public IEnumerable<ADDomainController> GetReachableSiteDomainControllers()
{ {
return this.DomainControllers.Where(dc => dc.IsSiteServer && dc.DomainController.IsReachable()); return DomainControllers.Where(dc => dc.IsSiteServer && dc.DomainController.IsReachable());
} }
public ADDomainController GetAvailableDomainController(bool RequireWritable = false) public ADDomainController GetAvailableDomainController(bool RequireWritable = false)
{ {
if (this.domainMaintenanceNext < DateTime.Now) if (domainMaintenanceNext < DateTime.Now)
MaintainDomainControllers(); MaintainDomainControllers();
IEnumerable<ADDomainController> availableServers; IEnumerable<ADDomainController> availableServers;
@@ -144,7 +144,7 @@ namespace Disco.Services.Interop.ActiveDirectory
} }
private IEnumerable<ADDomainController> AvailableDomainControllers(bool RequireSiteServer, bool RequireWritable) private IEnumerable<ADDomainController> AvailableDomainControllers(bool RequireSiteServer, bool RequireWritable)
{ {
IEnumerable<ADDomainController> query = this.DomainControllers.Where(dc => dc.IsAvailable); IEnumerable<ADDomainController> query = DomainControllers.Where(dc => dc.IsAvailable);
if (RequireSiteServer) if (RequireSiteServer)
query = query.Where(dc => dc.IsSiteServer); query = query.Where(dc => dc.IsSiteServer);
if (RequireWritable) if (RequireWritable)
@@ -160,11 +160,11 @@ namespace Disco.Services.Interop.ActiveDirectory
else else
locatorOptions = LocatorOptions.ForceRediscovery; locatorOptions = LocatorOptions.ForceRediscovery;
var dc = this.Domain.FindDomainController(locatorOptions); var dc = Domain.FindDomainController(locatorOptions);
var dcName = dc.Name; var dcName = dc.Name;
var existingDC = this.DomainControllers.FirstOrDefault(edc => edc.Name == dcName); var existingDC = DomainControllers.FirstOrDefault(edc => edc.Name == dcName);
if (existingDC != null) if (existingDC != null)
{ {
@@ -183,10 +183,10 @@ namespace Disco.Services.Interop.ActiveDirectory
{ {
// New DC discovered // New DC discovered
var adDC = new ADDomainController(this.context, dc, this, dc.SiteName == this.context.Site.Name, RequireWritable); var adDC = new ADDomainController(context, dc, this, dc.SiteName == context.Site.Name, RequireWritable);
// Add DC to Available Servers // Add DC to Available Servers
this.domainControllers.Push(adDC); domainControllers.Push(adDC);
return adDC; return adDC;
} }
@@ -196,7 +196,7 @@ namespace Disco.Services.Interop.ActiveDirectory
{ {
lock (domainMaintainLock) lock (domainMaintainLock)
{ {
var servers = this.domainControllers.ToList(); var servers = domainControllers.ToList();
var nonSiteServersPresent = servers.Any(s => !s.IsSiteServer); var nonSiteServersPresent = servers.Any(s => !s.IsSiteServer);
@@ -216,13 +216,13 @@ namespace Disco.Services.Interop.ActiveDirectory
UpdateDomainControllers(servers.Where(s => s.IsSiteServer || s.IsAvailable)); UpdateDomainControllers(servers.Where(s => s.IsSiteServer || s.IsAvailable));
} }
} }
this.domainMaintenanceNext = DateTime.Now.AddMinutes(DomainMaintanceIntervalMinutes); domainMaintenanceNext = DateTime.Now.AddMinutes(DomainMaintanceIntervalMinutes);
} }
} }
internal void UpdateDomainControllers(IEnumerable<ADDomainController> DomainControllers) internal void UpdateDomainControllers(IEnumerable<ADDomainController> DomainControllers)
{ {
this.domainControllers = new ConcurrentStack<ADDomainController>(DomainControllers); domainControllers = new ConcurrentStack<ADDomainController>(DomainControllers);
} }
#endregion #endregion
@@ -233,7 +233,7 @@ namespace Disco.Services.Interop.ActiveDirectory
throw new ArgumentNullException("DistinguishedName"); throw new ArgumentNullException("DistinguishedName");
if (!DistinguishedName.EndsWith(this.DistinguishedName, StringComparison.OrdinalIgnoreCase)) if (!DistinguishedName.EndsWith(this.DistinguishedName, StringComparison.OrdinalIgnoreCase))
throw new ArgumentException(string.Format("The Distinguished Name ({0}) isn't a member of this domain [{1}]", DistinguishedName, this.Name), "DistinguishedName"); throw new ArgumentException(string.Format("The Distinguished Name ({0}) isn't a member of this domain [{1}]", DistinguishedName, Name), "DistinguishedName");
var dc = GetAvailableDomainController(); var dc = GetAvailableDomainController();
@@ -244,12 +244,12 @@ namespace Disco.Services.Interop.ActiveDirectory
public IEnumerable<ADSearchResult> SearchEntireDomain(string LdapFilter, string[] LoadProperties, int? ResultLimit = null) public IEnumerable<ADSearchResult> SearchEntireDomain(string LdapFilter, string[] LoadProperties, int? ResultLimit = null)
{ {
return SearchInternal(this.DistinguishedName, LdapFilter, LoadProperties, ResultLimit); return SearchInternal(DistinguishedName, LdapFilter, LoadProperties, ResultLimit);
} }
public IEnumerable<ADSearchResult> SearchScope(string LdapFilter, string[] LoadProperties, int? ResultLimit = null) public IEnumerable<ADSearchResult> SearchScope(string LdapFilter, string[] LoadProperties, int? ResultLimit = null)
{ {
var searchScope = this.SearchContainers; var searchScope = SearchContainers;
// No scope set, search entire domain // No scope set, search entire domain
if (searchScope == null) if (searchScope == null)
@@ -322,11 +322,11 @@ namespace Disco.Services.Interop.ActiveDirectory
internal void UpdateSearchContainers(List<string> Containers) internal void UpdateSearchContainers(List<string> Containers)
{ {
this.SearchContainers = Containers ?? new List<string>(); SearchContainers = Containers ?? new List<string>();
} }
internal void UpdateSearchEntireDomain() internal void UpdateSearchEntireDomain()
{ {
this.SearchContainers = null; SearchContainers = null;
} }
#region Helpers #region Helpers
@@ -335,7 +335,7 @@ namespace Disco.Services.Interop.ActiveDirectory
{ {
get get
{ {
return string.Format("CN=Computers,{0}", this.DistinguishedName); return string.Format("CN=Computers,{0}", DistinguishedName);
} }
} }
@@ -346,7 +346,7 @@ namespace Disco.Services.Interop.ActiveDirectory
StringBuilder name = new StringBuilder(); StringBuilder name = new StringBuilder();
name.Append('[').Append(this.NetBiosName).Append(']'); name.Append('[').Append(NetBiosName).Append(']');
var subDN = DistinguishedName.Substring(0, DistinguishedName.Length - this.DistinguishedName.Length); var subDN = DistinguishedName.Substring(0, DistinguishedName.Length - this.DistinguishedName.Length);
var subDNComponents = subDN.Split(','); var subDNComponents = subDN.Split(',');
@@ -365,7 +365,7 @@ namespace Disco.Services.Interop.ActiveDirectory
public override string ToString() public override string ToString()
{ {
return string.Format("{0} [{1}]", this.Name, this.NetBiosName); return string.Format("{0} [{1}]", Name, NetBiosName);
} }
public override bool Equals(object obj) public override bool Equals(object obj)
@@ -373,11 +373,11 @@ namespace Disco.Services.Interop.ActiveDirectory
if (obj == null || !(obj is ADDomain)) if (obj == null || !(obj is ADDomain))
return false; return false;
else else
return this.DistinguishedName == ((ADDomain)obj).DistinguishedName; return DistinguishedName == ((ADDomain)obj).DistinguishedName;
} }
public override int GetHashCode() public override int GetHashCode()
{ {
return System.Runtime.CompilerServices.RuntimeHelpers.GetHashCode(this.DistinguishedName); return System.Runtime.CompilerServices.RuntimeHelpers.GetHashCode(DistinguishedName);
} }
} }
} }
@@ -45,18 +45,18 @@ namespace Disco.Services.Interop.ActiveDirectory
public ADDomainController(ActiveDirectoryContext Context, DomainController DomainController, ADDomain Domain, bool IsSiteServer, bool IsWritable) public ADDomainController(ActiveDirectoryContext Context, DomainController DomainController, ADDomain Domain, bool IsSiteServer, bool IsWritable)
{ {
this.context = Context; context = Context;
this.Domain = Domain; this.Domain = Domain;
this.DomainController = DomainController; this.DomainController = DomainController;
this.Name = DomainController.Name; Name = DomainController.Name;
this.SiteName = DomainController.SiteName; SiteName = DomainController.SiteName;
this.IsSiteServer = IsSiteServer; this.IsSiteServer = IsSiteServer;
this.IsWritable = IsWritable; this.IsWritable = IsWritable;
this.AvailableWhen = null; AvailableWhen = null;
} }
public ADDirectoryEntry RetrieveDirectoryEntry(string DistinguishedName, string[] LoadProperties = null) public ADDirectoryEntry RetrieveDirectoryEntry(string DistinguishedName, string[] LoadProperties = null)
@@ -64,15 +64,15 @@ namespace Disco.Services.Interop.ActiveDirectory
if (string.IsNullOrWhiteSpace(DistinguishedName)) if (string.IsNullOrWhiteSpace(DistinguishedName))
throw new ArgumentNullException("DistinguishedName"); throw new ArgumentNullException("DistinguishedName");
if (!DistinguishedName.EndsWith(this.Domain.DistinguishedName, StringComparison.OrdinalIgnoreCase)) if (!DistinguishedName.EndsWith(Domain.DistinguishedName, StringComparison.OrdinalIgnoreCase))
throw new ArgumentException(string.Format("The Distinguished Name ({0}) isn't a member of this domain [{1}]", DistinguishedName, this.Domain.Name), "DistinguishedName"); throw new ArgumentException(string.Format("The Distinguished Name ({0}) isn't a member of this domain [{1}]", DistinguishedName, Domain.Name), "DistinguishedName");
var entry = new DirectoryEntry(string.Format(LdapPathTemplate, this.Name, ADHelpers.EscapeDistinguishedName(DistinguishedName))); var entry = new DirectoryEntry(string.Format(LdapPathTemplate, Name, ADHelpers.EscapeDistinguishedName(DistinguishedName)));
if (LoadProperties != null) if (LoadProperties != null)
entry.RefreshCache(LoadProperties); entry.RefreshCache(LoadProperties);
return new ADDirectoryEntry(this.Domain, this, entry); return new ADDirectoryEntry(Domain, this, entry);
} }
#region Searching #region Searching
@@ -83,7 +83,7 @@ namespace Disco.Services.Interop.ActiveDirectory
public IEnumerable<ADSearchResult> SearchScope(string LdapFilter, string[] LoadProperties, int? ResultLimit = null) public IEnumerable<ADSearchResult> SearchScope(string LdapFilter, string[] LoadProperties, int? ResultLimit = null)
{ {
var searchScope = this.Domain.SearchContainers; var searchScope = Domain.SearchContainers;
// No scope set, search entire domain // No scope set, search entire domain
if (searchScope == null) if (searchScope == null)
@@ -109,7 +109,7 @@ namespace Disco.Services.Interop.ActiveDirectory
if (ResultLimit.HasValue && ResultLimit.Value < 1) if (ResultLimit.HasValue && ResultLimit.Value < 1)
throw new ArgumentOutOfRangeException("ResultLimit", "The ResultLimit must be 1 or greater"); throw new ArgumentOutOfRangeException("ResultLimit", "The ResultLimit must be 1 or greater");
using (ADDirectoryEntry rootEntry = this.RetrieveDirectoryEntry(SearchRoot)) using (ADDirectoryEntry rootEntry = RetrieveDirectoryEntry(SearchRoot))
{ {
using (DirectorySearcher searcher = new DirectorySearcher(rootEntry.Entry, LdapFilter, LoadProperties, System.DirectoryServices.SearchScope.Subtree)) using (DirectorySearcher searcher = new DirectorySearcher(rootEntry.Entry, LdapFilter, LoadProperties, System.DirectoryServices.SearchScope.Subtree))
{ {
@@ -174,7 +174,7 @@ namespace Disco.Services.Interop.ActiveDirectory
{ {
ldapFilter = string.Format(ADMachineAccount.LdapNetbootGuidSingleFilterTemplate, MacAddressNetbootGUID.Value.ToLdapQueryFormat()); ldapFilter = string.Format(ADMachineAccount.LdapNetbootGuidSingleFilterTemplate, MacAddressNetbootGUID.Value.ToLdapQueryFormat());
} }
adResult = this.SearchEntireDomain(ldapFilter, loadProperites, ActiveDirectory.SingleSearchResult).FirstOrDefault(); adResult = SearchEntireDomain(ldapFilter, loadProperites, ActiveDirectory.SingleSearchResult).FirstOrDefault();
} }
if (adResult != null) if (adResult != null)
@@ -212,7 +212,7 @@ namespace Disco.Services.Interop.ActiveDirectory
? ADGroup.LoadProperties.Concat(AdditionalProperties).ToArray() ? ADGroup.LoadProperties.Concat(AdditionalProperties).ToArray()
: ADGroup.LoadProperties; : ADGroup.LoadProperties;
using (var groupEntry = this.RetrieveDirectoryEntry(DistinguishedName, loadProperites)) using (var groupEntry = RetrieveDirectoryEntry(DistinguishedName, loadProperites))
{ {
if (groupEntry == null) if (groupEntry == null)
return null; return null;
@@ -224,8 +224,8 @@ namespace Disco.Services.Interop.ActiveDirectory
{ {
if (SecurityIdentifier == null) if (SecurityIdentifier == null)
throw new ArgumentNullException("SecurityIdentifier"); throw new ArgumentNullException("SecurityIdentifier");
if (!SecurityIdentifier.IsEqualDomainSid(this.Domain.SecurityIdentifier)) if (!SecurityIdentifier.IsEqualDomainSid(Domain.SecurityIdentifier))
throw new ArgumentException(string.Format("The specified Security Identifier [{0}] does not belong to this domain [{1}]", SecurityIdentifier.ToString(), this.Domain.Name), "SecurityIdentifier"); throw new ArgumentException(string.Format("The specified Security Identifier [{0}] does not belong to this domain [{1}]", SecurityIdentifier.ToString(), Domain.Name), "SecurityIdentifier");
var sidBinaryString = SecurityIdentifier.ToBinaryString(); var sidBinaryString = SecurityIdentifier.ToBinaryString();
@@ -234,7 +234,7 @@ namespace Disco.Services.Interop.ActiveDirectory
? ADGroup.LoadProperties.Concat(AdditionalProperties).ToArray() ? ADGroup.LoadProperties.Concat(AdditionalProperties).ToArray()
: ADGroup.LoadProperties; : ADGroup.LoadProperties;
var result = this.SearchEntireDomain(ldapFilter, loadProperites, ActiveDirectory.SingleSearchResult).FirstOrDefault(); var result = SearchEntireDomain(ldapFilter, loadProperites, ActiveDirectory.SingleSearchResult).FirstOrDefault();
if (result == null) if (result == null)
return null; return null;
else else
@@ -280,7 +280,7 @@ namespace Disco.Services.Interop.ActiveDirectory
{ {
Dictionary<string, List<ADOrganisationalUnit>> resultTree = new Dictionary<string, List<ADOrganisationalUnit>>(); Dictionary<string, List<ADOrganisationalUnit>> resultTree = new Dictionary<string, List<ADOrganisationalUnit>>();
var unsortedOrganisationalUnits = this.SearchEntireDomain(OrganisationalUnitsLdapFilter, OrganisationalUnitsLoadProperties) var unsortedOrganisationalUnits = SearchEntireDomain(OrganisationalUnitsLdapFilter, OrganisationalUnitsLoadProperties)
.Select(r => r.AsADOrganisationalUnit()).ToList(); .Select(r => r.AsADOrganisationalUnit()).ToList();
var indexedOrganisationalUnits = unsortedOrganisationalUnits.ToDictionary(k => k.DistinguishedName); var indexedOrganisationalUnits = unsortedOrganisationalUnits.ToDictionary(k => k.DistinguishedName);
@@ -307,12 +307,12 @@ namespace Disco.Services.Interop.ActiveDirectory
{ {
var slashIndex = Id.IndexOf('\\'); var slashIndex = Id.IndexOf('\\');
if (!this.Domain.NetBiosName.Equals(Id.Substring(0, slashIndex), StringComparison.OrdinalIgnoreCase)) if (!Domain.NetBiosName.Equals(Id.Substring(0, slashIndex), StringComparison.OrdinalIgnoreCase))
throw new ArgumentException(string.Format("The Id [{0}] is invalid for this domain [{1}]", Id, this.Domain.Name), "Id"); throw new ArgumentException(string.Format("The Id [{0}] is invalid for this domain [{1}]", Id, Domain.Name), "Id");
var ldapFilter = string.Format(LdapFilterTemplate, Id.Substring(slashIndex + 1)); var ldapFilter = string.Format(LdapFilterTemplate, Id.Substring(slashIndex + 1));
return this.SearchEntireDomain(ldapFilter, LoadProperties, ActiveDirectory.SingleSearchResult).FirstOrDefault(); return SearchEntireDomain(ldapFilter, LoadProperties, ActiveDirectory.SingleSearchResult).FirstOrDefault();
} }
#endregion #endregion
@@ -321,7 +321,7 @@ namespace Disco.Services.Interop.ActiveDirectory
{ {
using (Ping p = new Ping()) using (Ping p = new Ping())
{ {
var pr = p.Send(this.Name, 1000); var pr = p.Send(Name, 1000);
return (pr.Status == IPStatus.Success); return (pr.Status == IPStatus.Success);
} }
} }
@@ -331,8 +331,8 @@ namespace Disco.Services.Interop.ActiveDirectory
if (MachineAccount != null && MachineAccount.IsCriticalSystemObject) if (MachineAccount != null && MachineAccount.IsCriticalSystemObject)
throw new InvalidOperationException(string.Format("This account {0} is a Critical System Active Directory Object and Disco refuses to modify it", MachineAccount.DistinguishedName)); throw new InvalidOperationException(string.Format("This account {0} is a Critical System Active Directory Object and Disco refuses to modify it", MachineAccount.DistinguishedName));
if (!this.IsWritable) if (!IsWritable)
throw new InvalidOperationException(string.Format("The domain controller [{0}] is not writable. This action (Offline Domain Join Provision) requires a writable domain controller.", this.Name)); throw new InvalidOperationException(string.Format("The domain controller [{0}] is not writable. This action (Offline Domain Join Provision) requires a writable domain controller.", Name));
StringBuilder diagnosticInfo = new StringBuilder(); StringBuilder diagnosticInfo = new StringBuilder();
string DJoinResult = null; string DJoinResult = null;
@@ -349,7 +349,7 @@ namespace Disco.Services.Interop.ActiveDirectory
{ {
try try
{ {
using (var deOU = this.RetrieveDirectoryEntry(OrganisationalUnit, new string[] { "distinguishedName" })) using (var deOU = RetrieveDirectoryEntry(OrganisationalUnit, new string[] { "distinguishedName" }))
{ {
if (deOU == null) if (deOU == null)
throw new Exception(string.Format("OU's Directory Entry couldn't be found at [{0}]", OrganisationalUnit)); throw new Exception(string.Format("OU's Directory Entry couldn't be found at [{0}]", OrganisationalUnit));
@@ -367,8 +367,8 @@ namespace Disco.Services.Interop.ActiveDirectory
string tempFileName = System.IO.Path.GetTempFileName(); string tempFileName = System.IO.Path.GetTempFileName();
string argumentOU = (!string.IsNullOrWhiteSpace(OrganisationalUnit)) ? string.Format(" /MACHINEOU \"{0}\"", OrganisationalUnit) : string.Empty; string argumentOU = (!string.IsNullOrWhiteSpace(OrganisationalUnit)) ? string.Format(" /MACHINEOU \"{0}\"", OrganisationalUnit) : string.Empty;
string arguments = string.Format("/PROVISION /DOMAIN \"{0}\" /DCNAME \"{1}\" /MACHINE \"{2}\"{3} /REUSE /SAVEFILE \"{4}\"", string arguments = string.Format("/PROVISION /DOMAIN \"{0}\" /DCNAME \"{1}\" /MACHINE \"{2}\"{3} /REUSE /SAVEFILE \"{4}\"",
this.Domain.Name, Domain.Name,
this.Name, Name,
ComputerSamAccountName, ComputerSamAccountName,
argumentOU, argumentOU,
tempFileName tempFileName
@@ -409,7 +409,7 @@ namespace Disco.Services.Interop.ActiveDirectory
DiagnosticInformation = diagnosticInfo.ToString(); DiagnosticInformation = diagnosticInfo.ToString();
// Reload Machine Account // Reload Machine Account
MachineAccount = this.RetrieveADMachineAccount(string.Format(@"{0}\{1}", this.Domain.NetBiosName, ComputerSamAccountName), (MachineAccount == null ? null : MachineAccount.LoadedProperties.Keys.ToArray())); MachineAccount = RetrieveADMachineAccount(string.Format(@"{0}\{1}", Domain.NetBiosName, ComputerSamAccountName), (MachineAccount == null ? null : MachineAccount.LoadedProperties.Keys.ToArray()));
return DJoinResult; return DJoinResult;
} }
@@ -417,7 +417,7 @@ namespace Disco.Services.Interop.ActiveDirectory
public override string ToString() public override string ToString()
{ {
return this.Name; return Name;
} }
public override bool Equals(object obj) public override bool Equals(object obj)
@@ -425,11 +425,11 @@ namespace Disco.Services.Interop.ActiveDirectory
if (obj == null || !(obj is ADDomainController)) if (obj == null || !(obj is ADDomainController))
return false; return false;
else else
return this.Name == ((ADDomainController)obj).Name; return Name == ((ADDomainController)obj).Name;
} }
public override int GetHashCode() public override int GetHashCode()
{ {
return System.Runtime.CompilerServices.RuntimeHelpers.GetHashCode(this.Name); return System.Runtime.CompilerServices.RuntimeHelpers.GetHashCode(Name);
} }
} }
} }
@@ -1,6 +1,5 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.DirectoryServices;
using System.Linq; using System.Linq;
using System.Security.Principal; using System.Security.Principal;
@@ -22,7 +21,7 @@ namespace Disco.Services.Interop.ActiveDirectory
public string SamAccountName { get; private set; } public string SamAccountName { get; private set; }
public string Name { get; private set; } public string Name { get; private set; }
public string DisplayName { get { return this.Name; } } public string DisplayName { get { return Name; } }
public List<string> MemberOf { get; private set; } public List<string> MemberOf { get; private set; }
@@ -105,18 +104,18 @@ namespace Disco.Services.Interop.ActiveDirectory
switch (PropertyName.ToLower()) switch (PropertyName.ToLower())
{ {
case "name": case "name":
return new string[] { this.Name }.OfType<T>(); return new string[] { Name }.OfType<T>();
case "samaccountname": case "samaccountname":
return new string[] { this.SamAccountName }.OfType<T>(); return new string[] { SamAccountName }.OfType<T>();
case "distinguishedname": case "distinguishedname":
return new string[] { this.DistinguishedName }.OfType<T>(); return new string[] { DistinguishedName }.OfType<T>();
case "objectsid": case "objectsid":
return new SecurityIdentifier[] { this.SecurityIdentifier }.OfType<T>(); return new SecurityIdentifier[] { SecurityIdentifier }.OfType<T>();
case "memberof": case "memberof":
return this.MemberOf.OfType<T>(); return MemberOf.OfType<T>();
default: default:
object[] adProperty; object[] adProperty;
if (this.LoadedProperties.TryGetValue(PropertyName, out adProperty)) if (LoadedProperties.TryGetValue(PropertyName, out adProperty))
return adProperty.OfType<T>(); return adProperty.OfType<T>();
else else
return Enumerable.Empty<T>(); return Enumerable.Empty<T>();
@@ -125,7 +124,7 @@ namespace Disco.Services.Interop.ActiveDirectory
public override string ToString() public override string ToString()
{ {
return this.Id; return Id;
} }
public override bool Equals(object obj) public override bool Equals(object obj)
@@ -133,11 +132,11 @@ namespace Disco.Services.Interop.ActiveDirectory
if (obj == null || !(obj is ADGroup)) if (obj == null || !(obj is ADGroup))
return false; return false;
else else
return this.DistinguishedName == ((ADGroup)obj).DistinguishedName; return DistinguishedName == ((ADGroup)obj).DistinguishedName;
} }
public override int GetHashCode() public override int GetHashCode()
{ {
return System.Runtime.CompilerServices.RuntimeHelpers.GetHashCode(this.DistinguishedName); return System.Runtime.CompilerServices.RuntimeHelpers.GetHashCode(DistinguishedName);
} }
} }
} }
@@ -36,7 +36,7 @@ namespace Disco.Services.Interop.ActiveDirectory
public ADGroup GetGroup() public ADGroup GetGroup()
{ {
return ActiveDirectory.RetrieveADGroup(this.Configuration.GroupId, "member"); return ActiveDirectory.RetrieveADGroup(Configuration.GroupId, "member");
} }
protected void AddMember(string Id) protected void AddMember(string Id)
@@ -1,5 +1,4 @@
using Disco.Data.Repository; using Disco.Data.Repository;
using Disco.Services.Logging;
using Disco.Services.Tasks; using Disco.Services.Tasks;
using Quartz; using Quartz;
using System; using System;
@@ -20,23 +19,23 @@ namespace Disco.Services.Interop.ActiveDirectory
TriggerBuilder triggerBuilder = TriggerBuilder.Create(). TriggerBuilder triggerBuilder = TriggerBuilder.Create().
WithSchedule(CronScheduleBuilder.DailyAtHourAndMinute(23, 0)); WithSchedule(CronScheduleBuilder.DailyAtHourAndMinute(23, 0));
this.ScheduleTask(triggerBuilder); ScheduleTask(triggerBuilder);
} }
protected override void ExecuteTask() protected override void ExecuteTask()
{ {
int changeCount; int changeCount;
List<ADManagedGroup> managedGroups = this.ExecutionContext.JobDetail.JobDataMap["ManagedGroups"] as List<ADManagedGroup>; List<ADManagedGroup> managedGroups = ExecutionContext.JobDetail.JobDataMap["ManagedGroups"] as List<ADManagedGroup>;
if (managedGroups == null) if (managedGroups == null)
managedGroups = ActiveDirectory.Context.ManagedGroups.Values; managedGroups = ActiveDirectory.Context.ManagedGroups.Values;
this.Status.UpdateStatus(0, "Synchronising Active Directory Managed Groups", "Starting"); Status.UpdateStatus(0, "Synchronising Active Directory Managed Groups", "Starting");
changeCount = ActiveDirectory.Context.ManagedGroups.SyncManagedGroups(managedGroups, this.Status); changeCount = ActiveDirectory.Context.ManagedGroups.SyncManagedGroups(managedGroups, Status);
Status.LogInformation($"Synchronised Active Directory Managed Groups, {changeCount:N0} changes made"); Status.LogInformation($"Synchronised Active Directory Managed Groups, {changeCount:N0} changes made");
this.Status.SetFinishedMessage(string.Format("Made {0} Changes to Active Directory Groups", changeCount)); Status.SetFinishedMessage(string.Format("Made {0} Changes to Active Directory Groups", changeCount));
} }
public static ScheduledTaskStatus ScheduleSync(ADManagedGroup ManagedGroup) public static ScheduledTaskStatus ScheduleSync(ADManagedGroup ManagedGroup)
@@ -27,10 +27,10 @@ namespace Disco.Services.Interop.ActiveDirectory
{ {
int changeCount; int changeCount;
this.Status.UpdateStatus(1, "Starting", "Connecting to the Database and initializing the environment"); Status.UpdateStatus(1, "Starting", "Connecting to the Database and initializing the environment");
using (DiscoDataContext database = new DiscoDataContext()) using (DiscoDataContext database = new DiscoDataContext())
{ {
UpdateLastNetworkLogonDates(database, this.Status); UpdateLastNetworkLogonDates(database, Status);
Status.UpdateStatus(95, "Updating Database", "Writing last network logon dates to the Database"); Status.UpdateStatus(95, "Updating Database", "Writing last network logon dates to the Database");
changeCount = database.SaveChanges(); changeCount = database.SaveChanges();
Status.Finished(string.Format("{0} Device last network logon dates updated", changeCount), "/Config/SystemConfig"); Status.Finished(string.Format("{0} Device last network logon dates updated", changeCount), "/Config/SystemConfig");
@@ -28,7 +28,7 @@ namespace Disco.Services.Interop.ActiveDirectory
public override string ToString() public override string ToString()
{ {
return this.Name; return Name;
} }
public override bool Equals(object obj) public override bool Equals(object obj)
@@ -36,11 +36,11 @@ namespace Disco.Services.Interop.ActiveDirectory
if (obj == null || !(obj is ADOrganisationalUnit)) if (obj == null || !(obj is ADOrganisationalUnit))
return false; return false;
else else
return this.DistinguishedName == ((ADOrganisationalUnit)obj).DistinguishedName; return DistinguishedName == ((ADOrganisationalUnit)obj).DistinguishedName;
} }
public override int GetHashCode() public override int GetHashCode()
{ {
return System.Runtime.CompilerServices.RuntimeHelpers.GetHashCode(this.DistinguishedName); return System.Runtime.CompilerServices.RuntimeHelpers.GetHashCode(DistinguishedName);
} }
} }
} }
@@ -18,14 +18,14 @@ namespace Disco.Services.Interop.ActiveDirectory
public ADSearchResult(ADDomain Domain, ADDomainController DomainController, string SearchPath, string LdapFilter, SearchResult Result) public ADSearchResult(ADDomain Domain, ADDomainController DomainController, string SearchPath, string LdapFilter, SearchResult Result)
{ {
this._result = Result; _result = Result;
this.Domain = Domain; this.Domain = Domain;
this.DomainController = DomainController; this.DomainController = DomainController;
this.SearchPath = SearchPath; this.SearchPath = SearchPath;
this.LdapFilter = LdapFilter; this.LdapFilter = LdapFilter;
this.LdapPath = _result.Path; LdapPath = _result.Path;
this.DistinguishedName = Value<string>("dn"); DistinguishedName = Value<string>("dn");
} }
public bool Contains(string PropertyName) public bool Contains(string PropertyName)
@@ -47,7 +47,7 @@ namespace Disco.Services.Interop.ActiveDirectory
public override string ToString() public override string ToString()
{ {
return this.LdapPath; return LdapPath;
} }
} }
} }
@@ -16,12 +16,12 @@ namespace Disco.Services.Interop.ActiveDirectory
public ADSite(ActiveDirectoryContext Context, ActiveDirectorySite Site) public ADSite(ActiveDirectoryContext Context, ActiveDirectorySite Site)
{ {
this.context = Context; context = Context;
this.Site = Site; this.Site = Site;
this.Name = Site.Name; Name = Site.Name;
this.DomainControllers = null; DomainControllers = null;
} }
internal void UpdateDomainControllers(IEnumerable<ADDomainController> DomainControllers) internal void UpdateDomainControllers(IEnumerable<ADDomainController> DomainControllers)
@@ -31,7 +31,7 @@ namespace Disco.Services.Interop.ActiveDirectory
public override string ToString() public override string ToString()
{ {
return this.Name; return Name;
} }
public override bool Equals(object obj) public override bool Equals(object obj)
@@ -39,11 +39,11 @@ namespace Disco.Services.Interop.ActiveDirectory
if (obj == null || !(obj is ADSite)) if (obj == null || !(obj is ADSite))
return false; return false;
else else
return this.Name == ((ADSite)obj).Name; return Name == ((ADSite)obj).Name;
} }
public override int GetHashCode() public override int GetHashCode()
{ {
return System.Runtime.CompilerServices.RuntimeHelpers.GetHashCode(this.Name); return System.Runtime.CompilerServices.RuntimeHelpers.GetHashCode(Name);
} }
} }
} }
@@ -2,11 +2,8 @@
using Disco.Models.Repository; using Disco.Models.Repository;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Diagnostics;
using System.Linq; using System.Linq;
using System.Security.Principal; using System.Security.Principal;
using System.Text;
using System.Threading.Tasks;
namespace Disco.Services.Interop.ActiveDirectory namespace Disco.Services.Interop.ActiveDirectory
{ {
@@ -1,11 +1,9 @@
using Disco.Data.Repository; using Disco.Data.Repository;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.DirectoryServices;
using System.DirectoryServices.ActiveDirectory; using System.DirectoryServices.ActiveDirectory;
using System.Linq; using System.Linq;
using System.Security.Principal; using System.Security.Principal;
using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
namespace Disco.Services.Interop.ActiveDirectory namespace Disco.Services.Interop.ActiveDirectory
@@ -53,22 +51,22 @@ namespace Disco.Services.Interop.ActiveDirectory
private void Initialize(DiscoDataContext Database) private void Initialize(DiscoDataContext Database)
{ {
// Search Entire Forest (default: true) // Search Entire Forest (default: true)
this._SearchAllForestServers = Database.DiscoConfiguration.ActiveDirectory.SearchAllForestServers ?? true; _SearchAllForestServers = Database.DiscoConfiguration.ActiveDirectory.SearchAllForestServers ?? true;
// Set Search LDAP Filters // Set Search LDAP Filters
InitializeWildcardSearchSufixOnly(Database.DiscoConfiguration.ActiveDirectory.SearchWildcardSuffixOnly); InitializeWildcardSearchSufixOnly(Database.DiscoConfiguration.ActiveDirectory.SearchWildcardSuffixOnly);
// Determine Site // Determine Site
var computerSite = ActiveDirectorySite.GetComputerSite(); var computerSite = ActiveDirectorySite.GetComputerSite();
this.Site = new ADSite(this, computerSite); Site = new ADSite(this, computerSite);
// Determine Domains // Determine Domains
var computerDomain = Domain.GetComputerDomain(); var computerDomain = Domain.GetComputerDomain();
this.Domains = computerDomain.Forest.Domains Domains = computerDomain.Forest.Domains
.Cast<Domain>() .Cast<Domain>()
.Select(d => new ADDomain(this, d)) .Select(d => new ADDomain(this, d))
.ToList(); .ToList();
this.PrimaryDomain = this.Domains.Where(d => d.Name == computerDomain.Name).First(); PrimaryDomain = Domains.Where(d => d.Name == computerDomain.Name).First();
// Determine Search Scope Containers // Determine Search Scope Containers
ReinitializeSearchContainers(Database.DiscoConfiguration.ActiveDirectory.SearchContainers); ReinitializeSearchContainers(Database.DiscoConfiguration.ActiveDirectory.SearchContainers);
@@ -80,7 +78,7 @@ namespace Disco.Services.Interop.ActiveDirectory
.Select(dc => new ADDomainController(this, dc, GetDomainByName(dc.Domain.Name), IsSiteServer: true, IsWritable: false)); .Select(dc => new ADDomainController(this, dc, GetDomainByName(dc.Domain.Name), IsSiteServer: true, IsWritable: false));
Site.UpdateDomainControllers(siteDomainControllers); Site.UpdateDomainControllers(siteDomainControllers);
this.Domains.ForEach(domain => domain.UpdateDomainControllers(siteDomainControllers.Where(dc => dc.Domain == domain))); Domains.ForEach(domain => domain.UpdateDomainControllers(siteDomainControllers.Where(dc => dc.Domain == domain)));
} }
#endregion #endregion
@@ -90,7 +88,7 @@ namespace Disco.Services.Interop.ActiveDirectory
public bool TryGetDomainFromDistinguishedName(string DistinguishedName, out ADDomain Domain) public bool TryGetDomainFromDistinguishedName(string DistinguishedName, out ADDomain Domain)
{ {
// Find closest match // Find closest match
Domain = this.Domains.Where(d => DistinguishedName.EndsWith(d.DistinguishedName, StringComparison.OrdinalIgnoreCase)) Domain = Domains.Where(d => DistinguishedName.EndsWith(d.DistinguishedName, StringComparison.OrdinalIgnoreCase))
.OrderByDescending(d => d.DistinguishedName.Length).FirstOrDefault(); .OrderByDescending(d => d.DistinguishedName.Length).FirstOrDefault();
return (Domain != null); return (Domain != null);
@@ -105,7 +103,7 @@ namespace Disco.Services.Interop.ActiveDirectory
public bool TryGetDomainByNetBiosName(string NetBiosName, out ADDomain Domain) public bool TryGetDomainByNetBiosName(string NetBiosName, out ADDomain Domain)
{ {
Domain = this.Domains.FirstOrDefault(d => d.NetBiosName.Equals(NetBiosName, StringComparison.OrdinalIgnoreCase)); Domain = Domains.FirstOrDefault(d => d.NetBiosName.Equals(NetBiosName, StringComparison.OrdinalIgnoreCase));
return (Domain != null); return (Domain != null);
} }
public ADDomain GetDomainByNetBiosName(string NetBiosName) public ADDomain GetDomainByNetBiosName(string NetBiosName)
@@ -118,7 +116,7 @@ namespace Disco.Services.Interop.ActiveDirectory
public bool TryGetDomainByName(string Name, out ADDomain Domain) public bool TryGetDomainByName(string Name, out ADDomain Domain)
{ {
Domain = this.Domains.FirstOrDefault(d => d.Name.Equals(Name, StringComparison.OrdinalIgnoreCase)); Domain = Domains.FirstOrDefault(d => d.Name.Equals(Name, StringComparison.OrdinalIgnoreCase));
return (Domain != null); return (Domain != null);
} }
public ADDomain GetDomainByName(string Name) public ADDomain GetDomainByName(string Name)
@@ -131,7 +129,7 @@ namespace Disco.Services.Interop.ActiveDirectory
public bool TryGetDomainFromSecurityIdentifier(SecurityIdentifier SecurityIdentifier, out ADDomain Domain) public bool TryGetDomainFromSecurityIdentifier(SecurityIdentifier SecurityIdentifier, out ADDomain Domain)
{ {
Domain = this.Domains.FirstOrDefault(d => d.SecurityIdentifier.IsEqualDomainSid(SecurityIdentifier)); Domain = Domains.FirstOrDefault(d => d.SecurityIdentifier.IsEqualDomainSid(SecurityIdentifier));
return (Domain != null); return (Domain != null);
} }
public ADDomain GetDomainFromSecurityIdentifier(SecurityIdentifier SecurityIdentifier) public ADDomain GetDomainFromSecurityIdentifier(SecurityIdentifier SecurityIdentifier)
@@ -184,14 +182,14 @@ namespace Disco.Services.Interop.ActiveDirectory
public IEnumerable<ADSearchResult> SearchEntireForest(string LdapFilter, string[] LoadProperties, int? ResultLimit = null) public IEnumerable<ADSearchResult> SearchEntireForest(string LdapFilter, string[] LoadProperties, int? ResultLimit = null)
{ {
var queries = this.Domains.Select(d => Tuple.Create(d, d.DistinguishedName)); var queries = Domains.Select(d => Tuple.Create(d, d.DistinguishedName));
return SearchInternal(queries, LdapFilter, LoadProperties, ResultLimit); return SearchInternal(queries, LdapFilter, LoadProperties, ResultLimit);
} }
public IEnumerable<ADSearchResult> SearchScope(string LdapFilter, string[] LoadProperties, int? ResultLimit = null) public IEnumerable<ADSearchResult> SearchScope(string LdapFilter, string[] LoadProperties, int? ResultLimit = null)
{ {
var queries = this.Domains.SelectMany( var queries = Domains.SelectMany(
d => d.SearchContainers ?? new List<string>() { d.DistinguishedName }, d => d.SearchContainers ?? new List<string>() { d.DistinguishedName },
(d, scope) => Tuple.Create(d, scope)); (d, scope) => Tuple.Create(d, scope));
@@ -256,7 +254,7 @@ namespace Disco.Services.Interop.ActiveDirectory
if (SearchAllForestServers == false) if (SearchAllForestServers == false)
{ {
Database.DiscoConfiguration.ActiveDirectory.SearchAllForestServers = false; Database.DiscoConfiguration.ActiveDirectory.SearchAllForestServers = false;
this._SearchAllForestServers = false; _SearchAllForestServers = false;
return true; return true;
} }
else else
@@ -265,13 +263,13 @@ namespace Disco.Services.Interop.ActiveDirectory
if (forestServers.Count <= ActiveDirectory.MaxForestServerSearch) if (forestServers.Count <= ActiveDirectory.MaxForestServerSearch)
{ {
Database.DiscoConfiguration.ActiveDirectory.SearchAllForestServers = true; Database.DiscoConfiguration.ActiveDirectory.SearchAllForestServers = true;
this._SearchAllForestServers = true; _SearchAllForestServers = true;
return true; return true;
} }
else else
{ {
Database.DiscoConfiguration.ActiveDirectory.SearchAllForestServers = false; Database.DiscoConfiguration.ActiveDirectory.SearchAllForestServers = false;
this._SearchAllForestServers = false; _SearchAllForestServers = false;
return false; return false;
} }
} }
@@ -315,18 +313,18 @@ namespace Disco.Services.Interop.ActiveDirectory
if (Containers == null) if (Containers == null)
{ {
// No search restrictions (search entire domain) // No search restrictions (search entire domain)
foreach (var domain in this.Domains) foreach (var domain in Domains)
domain.UpdateSearchEntireDomain(); domain.UpdateSearchEntireDomain();
} }
else else
{ {
// Restrict search containers // Restrict search containers
var searchContainerDomains = Containers.Join(this.Domains, ok => ok.Key, ik => ik.Name, (o, i) => Tuple.Create(o, i), StringComparer.OrdinalIgnoreCase); var searchContainerDomains = Containers.Join(Domains, ok => ok.Key, ik => ik.Name, (o, i) => Tuple.Create(o, i), StringComparer.OrdinalIgnoreCase);
foreach (var domainContainers in searchContainerDomains) foreach (var domainContainers in searchContainerDomains)
domainContainers.Item2.UpdateSearchContainers(domainContainers.Item1.Value); domainContainers.Item2.UpdateSearchContainers(domainContainers.Item1.Value);
// Ignore domains without configured containers // Ignore domains without configured containers
var unconfiguredContainers = this.Domains.Except(searchContainerDomains.Select(sc => sc.Item2)); var unconfiguredContainers = Domains.Except(searchContainerDomains.Select(sc => sc.Item2));
foreach (var domain in unconfiguredContainers) foreach (var domain in unconfiguredContainers)
domain.UpdateSearchContainers(new List<string>()); domain.UpdateSearchContainers(new List<string>());
} }
@@ -3,7 +3,6 @@ using System.Collections.Concurrent;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Security.Principal; using System.Security.Principal;
using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
namespace Disco.Services.Interop.ActiveDirectory namespace Disco.Services.Interop.ActiveDirectory
@@ -21,8 +20,8 @@ namespace Disco.Services.Interop.ActiveDirectory
public ActiveDirectoryGroupCache() public ActiveDirectoryGroupCache()
{ {
this.securityIdentifierCache = new ConcurrentDictionary<SecurityIdentifier, Tuple<ADGroup, DateTime>>(); securityIdentifierCache = new ConcurrentDictionary<SecurityIdentifier, Tuple<ADGroup, DateTime>>();
this.distinguishedNameCache = new ConcurrentDictionary<string, Tuple<ADGroup, DateTime>>(StringComparer.OrdinalIgnoreCase); distinguishedNameCache = new ConcurrentDictionary<string, Tuple<ADGroup, DateTime>>(StringComparer.OrdinalIgnoreCase);
cacheCleanNext = DateTime.Now.AddMinutes(CacheCleanIntervalMinutes); cacheCleanNext = DateTime.Now.AddMinutes(CacheCleanIntervalMinutes);
} }
@@ -3,8 +3,6 @@ using System.Collections.Concurrent;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Reactive.Subjects; using System.Reactive.Subjects;
using System.Text;
using System.Threading.Tasks;
using Disco.Data.Repository; using Disco.Data.Repository;
namespace Disco.Services.Interop.ActiveDirectory namespace Disco.Services.Interop.ActiveDirectory
@@ -436,7 +434,7 @@ namespace Disco.Services.Interop.ActiveDirectory
this.ManagedGroup = ManagedGroup; this.ManagedGroup = ManagedGroup;
this.ActionType = ActionType; this.ActionType = ActionType;
this.InvokingIdentifier = InvokingIdentifier; this.InvokingIdentifier = InvokingIdentifier;
this.memberResolver = MemberResolver; memberResolver = MemberResolver;
} }
public IEnumerable<ADManagedGroupScheduledActionItem> ResolveMembers(DiscoDataContext Database) public IEnumerable<ADManagedGroupScheduledActionItem> ResolveMembers(DiscoDataContext Database)
@@ -448,14 +446,14 @@ namespace Disco.Services.Interop.ActiveDirectory
return Enumerable.Empty<ADManagedGroupScheduledActionItem>(); return Enumerable.Empty<ADManagedGroupScheduledActionItem>();
else else
return members.Select(m => return members.Select(m =>
new ADManagedGroupScheduledActionItem(this.ManagedGroup, this.ActionType, m) new ADManagedGroupScheduledActionItem(ManagedGroup, ActionType, m)
); );
} }
else else
{ {
return new ADManagedGroupScheduledActionItem[] return new ADManagedGroupScheduledActionItem[]
{ {
new ADManagedGroupScheduledActionItem(this.ManagedGroup, this.ActionType, this.InvokingIdentifier) new ADManagedGroupScheduledActionItem(ManagedGroup, ActionType, InvokingIdentifier)
}; };
} }
} }
@@ -1,9 +1,7 @@
using Disco.Data.Repository; using Disco.Data.Repository;
using Disco.Services.Tasks; using Disco.Services.Tasks;
using Newtonsoft.Json;
using Quartz; using Quartz;
using System; using System;
using System.IO;
using System.Linq; using System.Linq;
namespace Disco.Services.Interop.DiscoServices namespace Disco.Services.Interop.DiscoServices
@@ -25,7 +23,7 @@ namespace Disco.Services.Interop.DiscoServices
TriggerBuilder triggerBuilder = TriggerBuilder.Create(). TriggerBuilder triggerBuilder = TriggerBuilder.Create().
WithSchedule(CronScheduleBuilder.DailyAtHourAndMinute(rndHour, rndMinute)); WithSchedule(CronScheduleBuilder.DailyAtHourAndMinute(rndHour, rndMinute));
this.ScheduleTask(triggerBuilder); ScheduleTask(triggerBuilder);
} }
protected override void ExecuteTask() protected override void ExecuteTask()
@@ -34,7 +32,7 @@ namespace Disco.Services.Interop.DiscoServices
{ {
Status.UpdateStatus(1, "Updating Plugin Library Manifest", "Initializing"); Status.UpdateStatus(1, "Updating Plugin Library Manifest", "Initializing");
var manifest = PluginLibrary.UpdateManifest(database, this.Status); var manifest = PluginLibrary.UpdateManifest(database, Status);
Status.SetFinishedMessage("The Plugin Library Manifest was updated successfully"); Status.SetFinishedMessage("The Plugin Library Manifest was updated successfully");
} }
@@ -23,7 +23,7 @@ namespace Disco.Services.Interop.DiscoServices
TriggerBuilder triggerBuilder = TriggerBuilder.Create(). TriggerBuilder triggerBuilder = TriggerBuilder.Create().
WithSchedule(CronScheduleBuilder.DailyAtHourAndMinute(rndHour, rndMinute)); WithSchedule(CronScheduleBuilder.DailyAtHourAndMinute(rndHour, rndMinute));
this.ScheduleTask(triggerBuilder); ScheduleTask(triggerBuilder);
} }
protected override void ExecuteTask() protected override void ExecuteTask()
@@ -7,8 +7,6 @@ using Disco.Services.Users;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Disco.Services namespace Disco.Services
{ {
@@ -146,7 +146,7 @@ using Disco.Services.Authorization;
.Subscribe(JobNotification, NotificationError); .Subscribe(JobNotification, NotificationError);
// Initially fill table // Initially fill table
base.Items = this.SortFunction(this.DetermineItems(Database, this.FilterFunction(Database.Jobs), FilterAuthorization)).ToList(); base.Items = SortFunction(this.DetermineItems(Database, FilterFunction(Database.Jobs), FilterAuthorization)).ToList();
} }
return this; return this;
} }
@@ -178,7 +178,7 @@ using Disco.Services.Authorization;
private void NotificationError(Exception ex) private void NotificationError(Exception ex)
{ {
SystemLog.LogException(string.Format("Disco.Services.Jobs.JobLists.ManagedJobList: [{0}]", this.Name), ex); SystemLog.LogException(string.Format("Disco.Services.Jobs.JobLists.ManagedJobList: [{0}]", Name), ex);
} }
private void JobNotification(RepositoryMonitorEvent e) private void JobNotification(RepositoryMonitorEvent e)
@@ -262,7 +262,7 @@ using Disco.Services.Authorization;
if (existingItems == null) if (existingItems == null)
existingItems = base.Items.Where(i => jobIds.Contains(i.JobId)).ToArray(); existingItems = base.Items.Where(i => jobIds.Contains(i.JobId)).ToArray();
var updatedItems = this.DetermineItems(Database, this.FilterFunction(Database.Jobs.Where(j => jobIds.Contains(j.Id))), false); var updatedItems = this.DetermineItems(Database, FilterFunction(Database.Jobs.Where(j => jobIds.Contains(j.Id))), false);
var refreshedList = base.Items.ToList(); var refreshedList = base.Items.ToList();
@@ -277,7 +277,7 @@ using Disco.Services.Authorization;
refreshedList.Add(updatedItem); refreshedList.Add(updatedItem);
// Reorder // Reorder
base.Items = this.SortFunction(refreshedList).ToList(); base.Items = SortFunction(refreshedList).ToList();
} }
} }
-2
View File
@@ -6,9 +6,7 @@ using Disco.Services.Web.Signalling;
using Microsoft.AspNet.SignalR; using Microsoft.AspNet.SignalR;
using Microsoft.AspNet.SignalR.Hubs; using Microsoft.AspNet.SignalR.Hubs;
using System; using System;
using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text;
using System.Reactive.Linq; using System.Reactive.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using Disco.Services.Users; using Disco.Services.Users;
-1
View File
@@ -2,7 +2,6 @@
using Disco.Models.Repository; using Disco.Models.Repository;
using Disco.Services.Expressions; using Disco.Services.Expressions;
using System; using System;
using System.Collections;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
@@ -29,15 +29,15 @@ namespace Disco.Services.Jobs.Noticeboards
{ {
get get
{ {
StringBuilder sb = new StringBuilder(this.DeviceComputerNameFriendly); StringBuilder sb = new StringBuilder(DeviceComputerNameFriendly);
if (UserId != null) if (UserId != null)
sb.Append(" - ").Append(this.UserDisplayName).Append(" (").Append(this.UserIdFriendly).Append(")"); sb.Append(" - ").Append(UserDisplayName).Append(" (").Append(UserIdFriendly).Append(")");
if (!string.IsNullOrWhiteSpace(this.DeviceLocation)) if (!string.IsNullOrWhiteSpace(DeviceLocation))
sb.Append(" - ").Append(this.DeviceLocation); sb.Append(" - ").Append(DeviceLocation);
else if (UserId == null) else if (UserId == null)
sb.Append(" - ").Append(this.DeviceSerialNumber); sb.Append(" - ").Append(DeviceSerialNumber);
return sb.ToString(); return sb.ToString();
} }
@@ -108,10 +108,10 @@ namespace Disco.Services.Jobs.Noticeboards
{ {
get get
{ {
if (this.ReadyForReturn && (this.ReadyForReturnSince.Value < DateTime.Now.AddDays(-3))) if (ReadyForReturn && (ReadyForReturnSince.Value < DateTime.Now.AddDays(-3)))
return true; return true;
if (this.WaitingForUserAction && (this.WaitingForUserActionSince.Value < DateTime.Now.AddDays(-6))) if (WaitingForUserAction && (WaitingForUserActionSince.Value < DateTime.Now.AddDays(-6)))
return true; return true;
return false; return false;
@@ -29,7 +29,7 @@ namespace Disco.Services.Jobs.Statistics
// Trigger Daily @ 12:29am // Trigger Daily @ 12:29am
TriggerBuilder triggerBuilder = TriggerBuilder.Create().WithSchedule(CronScheduleBuilder.DailyAtHourAndMinute(0, 29)); TriggerBuilder triggerBuilder = TriggerBuilder.Create().WithSchedule(CronScheduleBuilder.DailyAtHourAndMinute(0, 29));
this.ScheduleTask(triggerBuilder); ScheduleTask(triggerBuilder);
} }
protected override void ExecuteTask() protected override void ExecuteTask()
{ {
+4 -6
View File
@@ -1,7 +1,5 @@
using System; using System.Collections.Generic;
using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text;
namespace Disco.Services.Logging namespace Disco.Services.Logging
{ {
@@ -12,7 +10,7 @@ namespace Disco.Services.Logging
public LogBase() public LogBase()
{ {
// Cache Event Types // Cache Event Types
_EventTypes = this.LoadEventTypes().ToDictionary(et => et.Id); _EventTypes = LoadEventTypes().ToDictionary(et => et.Id);
} }
public abstract int ModuleId { get; } public abstract int ModuleId { get; }
@@ -29,13 +27,13 @@ namespace Disco.Services.Logging
} }
protected void Log(int EventTypeId, params object[] Args) protected void Log(int EventTypeId, params object[] Args)
{ {
LogContext.Current.Log(this.ModuleId, EventTypeId, Args); LogContext.Current.Log(ModuleId, EventTypeId, Args);
} }
public string LiveLogGroupName public string LiveLogGroupName
{ {
get get
{ {
return this.ModuleName; return ModuleName;
} }
} }
-6
View File
@@ -1,17 +1,11 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text;
using Disco.Data.Repository; using Disco.Data.Repository;
using System.IO; using System.IO;
using System.Management;
using System.Diagnostics;
using System.Data.SqlServerCe; using System.Data.SqlServerCe;
using System.Data.EntityClient;
using System.Data.Entity;
using Quartz; using Quartz;
using Quartz.Impl; using Quartz.Impl;
using Quartz.Impl.Triggers;
using Newtonsoft.Json; using Newtonsoft.Json;
namespace Disco.Services.Logging namespace Disco.Services.Logging
+1 -5
View File
@@ -1,8 +1,4 @@
using System; using Quartz;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Quartz;
using Disco.Data.Repository; using Disco.Data.Repository;
namespace Disco.Services.Logging namespace Disco.Services.Logging
@@ -1,7 +1,4 @@
using System; using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema; using System.ComponentModel.DataAnnotations.Schema;
@@ -1,7 +1,4 @@
using System; using System.Linq;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema; using System.ComponentModel.DataAnnotations.Schema;
@@ -1,8 +1,4 @@
using System; using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
using Newtonsoft.Json; using Newtonsoft.Json;
namespace Disco.Services.Logging.Models namespace Disco.Services.Logging.Models
+1 -4
View File
@@ -1,7 +1,4 @@
using System; using System.Collections.Generic;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema; using System.ComponentModel.DataAnnotations.Schema;

Some files were not shown because too many files have changed in this diff Show More