public void CanPostSingleEvent() { _eventController.Request = CreateRequestMessage(PrincipalUtility.CreateClientUser(TestConstants.ProjectId), true, false); var actionResult = _eventController.Post(Encoding.UTF8.GetBytes("simple string").Compress()).Result; Assert.IsType <OkResult>(actionResult); Assert.Equal(1, _eventQueue.Count); var processEventsJob = IoC.GetInstance <ProcessEventPostsJob>(); var result = processEventsJob.Run(); Assert.Equal(0, _eventQueue.Count); RemoveAllEvents(); }
public static void BuildWithContainer(IAppBuilder app, Container container) { if (container == null) { throw new ArgumentNullException("container"); } var config = new HttpConfiguration(); config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType)); config.Formatters.Remove(config.Formatters.XmlFormatter); config.Formatters.JsonFormatter.SerializerSettings.Formatting = Formatting.Indented; config.Formatters.JsonFormatter.SerializerSettings.ContractResolver = new LowerCaseUnderscorePropertyNamesContractResolver(); config.MessageHandlers.Add(new XHttpMethodOverrideDelegatingHandler()); config.MessageHandlers.Add(new EncodingDelegatingHandler()); // Throttle api calls to X every 15 minutes by IP address. config.MessageHandlers.Add(container.GetInstance <ThrottlingHandler>()); // Reject event posts in orgs over their max event limits. config.MessageHandlers.Add(container.GetInstance <OverageHandler>()); var constraintResolver = new DefaultInlineConstraintResolver(); constraintResolver.ConstraintMap.Add("objectid", typeof(ObjectIdRouteConstraint)); config.MapHttpAttributeRoutes(constraintResolver); container.RegisterWebApiFilterProvider(config); try { container.Verify(); } catch (Exception ex) { var tempEx = ex; while (!(tempEx is ReflectionTypeLoadException)) { if (tempEx.InnerException == null) { break; } tempEx = tempEx.InnerException; } var typeLoadException = tempEx as ReflectionTypeLoadException; if (typeLoadException != null) { foreach (var loaderEx in typeLoadException.LoaderExceptions) { Debug.WriteLine(loaderEx.Message); } } Debug.WriteLine(ex.Message); throw; } config.DependencyResolver = new SimpleInjectorWebApiDependencyResolver(container); //config.EnableSystemDiagnosticsTracing(); // sample middleware that would be how we would auth an api token // maybe we should be using custom OAuthBearerAuthenticationProvider's // http://leastprivilege.com/2013/10/31/retrieving-bearer-tokens-from-alternative-locations-in-katanaowin/ app.Use((context, next) => { var token = context.Request.Query.Get("access_token"); if (String.IsNullOrEmpty(token)) { var authHeader = context.Request.Headers.Get("Authorization"); if (!String.IsNullOrEmpty(authHeader)) { var authHeaderVal = AuthenticationHeaderValue.Parse(authHeader); if (authHeaderVal.Scheme.Equals("token", StringComparison.OrdinalIgnoreCase) || authHeaderVal.Scheme.Equals("bearer", StringComparison.OrdinalIgnoreCase)) { token = authHeaderVal.Parameter; } } } var projectRepository = container.GetInstance <IProjectRepository>(); if (String.IsNullOrEmpty(token)) { return(next.Invoke()); } var project = projectRepository.GetByApiKey(token); if (project == null) { return(next.Invoke()); } // TODO: Ensure that the current users roles are properly set. context.Request.User = PrincipalUtility.CreateUser(_userId, new[] { AuthorizationRoles.GlobalAdmin }); return(next.Invoke()); }); app.UseStageMarker(PipelineStage.Authenticate); app.CreatePerContext <Lazy <User> >("LazyUser", ctx => { if (ctx.Request.User == null || ctx.Request.User.Identity == null || !ctx.Request.User.Identity.IsAuthenticated) { return(null); } if (!ctx.Request.User.IsUserAuthType()) { return(null); } return(new Lazy <User>(() => { var userRepository = container.GetInstance <IUserRepository>(); return userRepository.GetById(ctx.Request.User.GetUserId(), true); })); }); app.CreatePerContext <Lazy <Project> >("LazyProject", ctx => { if (ctx.Request.User == null || ctx.Request.User.Identity == null || !ctx.Request.User.Identity.IsAuthenticated) { return(null); } if (!ctx.Request.User.IsProjectAuthType()) { return(null); } return(new Lazy <Project>(() => { var projectRepository = container.GetInstance <IProjectRepository>(); return projectRepository.GetById(ctx.Request.User.GetProjectId(), true); })); }); app.UseCors(CorsOptions.AllowAll); //app.MapSignalR(); app.UseWebApi(config); app.Use((context, next) => { if (!context.Request.Uri.AbsolutePath.StartsWith("/" + ExceptionlessApiController.API_PREFIX)) { return(next.Invoke()); } context.Response.Write("{\r\n \"message\": \"not found\"\r\n}"); context.Response.StatusCode = (int)HttpStatusCode.NotFound; return(Task.FromResult(0)); }); app.UseStageMarker(PipelineStage.PostMapHandler); PhysicalFileSystem fileSystem = null; if (Directory.Exists("./Content")) { fileSystem = new PhysicalFileSystem("./Content"); } if (Directory.Exists("./bin/Content")) { fileSystem = new PhysicalFileSystem("./bin/Content"); } if (fileSystem != null) { app.UseDefaultFiles(new DefaultFilesOptions { FileSystem = fileSystem }); app.UseStaticFiles(new StaticFileOptions { FileSystem = fileSystem }); } Mapper.Initialize(c => c.ConstructServicesUsing(container.GetInstance)); // TODO: Remove this as it's only for testing. EnsureSampleData(container); Task.Factory.StartNew(() => container.GetInstance <ProcessEventPostsJob>().Run()); }
public static void AllDirRptsGroups(string userId, bool recursive) { #region Environment const string projectName = "ADManager"; const string dirRptSuffix = "_DirRpts"; const string allRptSuffix = "_AllRpts"; const string mgrRptSuffix = "_MgrRpts"; var employeesLdapPath = "EMPLOYEES,"; var dirRptLdapPath = "OU=DirectReports,OU=ORGCHART,"; var allRptLdapPath = "OU=AllReports,OU=ORGCHART,"; var mgrRptLdapPath = "OU=ManagerReports,OU=ORGCHART,"; var directReportEmployees = new List <string>(); var activeDirectory = new PrincipalContext(ContextType.Domain); var dirRptsGroup = new GroupPrincipalFull(activeDirectory); var allRptsGroup = new GroupPrincipalFull(activeDirectory); try { var admins = GroupPrincipalFull.FindByIdentity(activeDirectory, "Domain Admins"); var ldapSuffix = admins.RootContainer; dirRptLdapPath += ldapSuffix; allRptLdapPath += ldapSuffix; mgrRptLdapPath += ldapSuffix; employeesLdapPath += ldapSuffix; } catch { } var managerDn = string.Empty; #endregion try { #region FetchUserInfo var user = UserPrincipalFull.FindByIdentity(activeDirectory, userId); Console.WriteLine("Processing {0}", user.DisplayName); var dirRptGrpName = PrincipalUtility.MakeSafeForLdap(user.DisplayName + dirRptSuffix); var allRptGrpName = PrincipalUtility.MakeSafeForLdap(user.DisplayName + allRptSuffix); var mgrRptGrpName = PrincipalUtility.MakeSafeForLdap(user.DisplayName + mgrRptSuffix); try { managerDn = user.Manager; } catch { } try { Console.WriteLine("Fetching {0}'s Direct Reports", user.DisplayName); directReportEmployees = user.DirectReports; } catch { } #endregion directReportEmployees = directReportEmployees.Where( dn => dn.ToLowerInvariant().Contains(employeesLdapPath.ToLowerInvariant())).ToList(); if (directReportEmployees.Count > 0) { #region ValidateDirRptGroup try { dirRptsGroup = GroupPrincipalFull.FindByIdentity(activeDirectory, dirRptGrpName); try { allRptsGroup = GroupPrincipalFull.FindByIdentity(activeDirectory, allRptGrpName); } catch { } if (!string.IsNullOrEmpty(dirRptsGroup.DistinguishedName)) { #region AddMgrToDirRpts try { Console.WriteLine("Adding {0} to {1}", user.DisplayName, dirRptsGroup.SamAccountName); dirRptsGroup.AddMember(user); } catch (Exception ex) { if (!ex.Message.Contains("object already exists")) { Console.WriteLine(ex); } } #endregion #region AddDirRptToMgrAllRpts try { var manager = new UserPrincipalFull(activeDirectory); try { manager = UserPrincipalFull.FindByIdentity(activeDirectory, managerDn); } catch { } var mgrAllRpts = GroupPrincipalFull.FindByIdentity(activeDirectory, PrincipalUtility.MakeSafeForLdap(manager.DisplayName + allRptSuffix)); try { Console.WriteLine("Adding {0} to {1}", dirRptGrpName, mgrAllRpts.SamAccountName); mgrAllRpts.AddMember(dirRptsGroup); } catch (DirectoryServicesCOMException dsce) { if (!dsce.Message.Contains("object already exists")) { Console.WriteLine(dsce); } } try { if (!string.IsNullOrEmpty(allRptsGroup.DistinguishedName)) { try { mgrAllRpts.AddMember(allRptsGroup); Console.WriteLine("Adding {0} to {1}", allRptsGroup.SamAccountName, mgrAllRpts.SamAccountName); } catch { } try { mgrAllRpts.RemoveMember(dirRptsGroup); Console.WriteLine("Removing {0} to {1}", dirRptsGroup.SamAccountName, mgrAllRpts.SamAccountName); } catch { } } } catch { } } catch (NullReferenceException) { } catch (Exception ex2) { if (!ex2.ToString().Contains("object already exists")) { Console.WriteLine(ex2); } } #endregion } } catch (Exception ex) { try { #region CreateDirRptGroup Console.WriteLine("Creating {0}", dirRptGrpName); var ou = new PrincipalContext(ContextType.Domain, null, dirRptLdapPath); dirRptsGroup = new GroupPrincipalFull(ou, dirRptGrpName); dirRptsGroup.Save(); try { dirRptsGroup = GroupPrincipalFull.FindByIdentity(activeDirectory, dirRptGrpName); dirRptsGroup.DisplayName = string.Format("{0} - Direct Reporting Employees", user.DisplayName); dirRptsGroup.Save(); } catch { } try { dirRptsGroup = GroupPrincipalFull.FindByIdentity(activeDirectory, dirRptGrpName); dirRptsGroup.Description = string.Format("Employees who directly report to {0}", user.DisplayName); dirRptsGroup.Save(); } catch { } try { dirRptsGroup = GroupPrincipalFull.FindByIdentity(activeDirectory, dirRptGrpName); dirRptsGroup.EmailAddress = string.Format("{0}@customer.com", dirRptGrpName); dirRptsGroup.Save(); } catch { } try { dirRptsGroup = GroupPrincipalFull.FindByIdentity(activeDirectory, dirRptGrpName); dirRptsGroup.GidNumber = int.Parse(user.EmployeeNumber); dirRptsGroup.Save(); } catch { } try { dirRptsGroup = GroupPrincipalFull.FindByIdentity(activeDirectory, dirRptGrpName); dirRptsGroup.Info = string.Format("Created by {0} on {1}", projectName, DateTime.Now.ToString(CultureInfo.InvariantCulture)); dirRptsGroup.Save(); } catch { } try { dirRptsGroup = GroupPrincipalFull.FindByIdentity(activeDirectory, dirRptGrpName); dirRptsGroup.ManagedBy = user.DistinguishedName; dirRptsGroup.Save(); } catch { } try { dirRptsGroup = GroupPrincipalFull.FindByIdentity(activeDirectory, dirRptGrpName); Console.WriteLine("Adding {0} to {1}", user.DisplayName, dirRptsGroup.SamAccountName); dirRptsGroup.AddMember(user); } catch (Exception ex2) { Console.WriteLine(ex2); } #region AddMgrToDirRpts try { Console.WriteLine("Adding {0} to {1}", user.DisplayName, dirRptsGroup.SamAccountName); dirRptsGroup.AddMember(user); } catch (Exception ex3) { if (!ex.Message.Contains("object already exists")) { Console.WriteLine(ex3); } } #endregion #region AddDirRptToMgrAllRpts try { var manager = UserPrincipalFull.FindByIdentity(activeDirectory, managerDn); var mgrAllRpts = GroupPrincipalFull.FindByIdentity(activeDirectory, PrincipalUtility.MakeSafeForLdap(manager.DisplayName + allRptSuffix)); Console.WriteLine("Adding {0} to {1}", dirRptGrpName, mgrAllRpts.SamAccountName); mgrAllRpts.AddMember(dirRptsGroup); } catch (NullReferenceException) { } catch (Exception ex2) { if (!ex2.ToString().Contains("object already exists")) { Console.WriteLine(ex2); } } #endregion #endregion } catch (Exception ex1) { Console.WriteLine(ex1); } } #endregion foreach (var dn in directReportEmployees) { try { var employee = UserPrincipalFull.FindByIdentity(activeDirectory, dn); #region AddEmpToDirRptGroup dirRptsGroup = GroupPrincipalFull.FindByIdentity(activeDirectory, dirRptGrpName); Console.WriteLine("Adding {0} to {1}", employee.DisplayName, dirRptsGroup.SamAccountName); try { dirRptsGroup.AddMember(employee); } catch (Exception ex1) { if (!ex1.ToString().Contains("object already exists")) { Console.WriteLine(ex1); } } #endregion #region MgrRptGroup var type = string.Empty; try { type = employee.EmployeeType.ToLowerInvariant(); } catch { } if (type.Contains("manager") || type.Contains("corporate officer")) { var mgrRpts = new GroupPrincipalFull(activeDirectory); try { mgrRpts = GroupPrincipalFull.FindByIdentity(activeDirectory, mgrRptGrpName); if (!string.IsNullOrEmpty(mgrRpts.DistinguishedName)) { } } catch (Exception) { #region CreateMgrRptGroup try { //group not found, so create the group Console.WriteLine("Creating {0}", mgrRptGrpName); var ou = new PrincipalContext(ContextType.Domain, null, mgrRptLdapPath); mgrRpts = new GroupPrincipalFull(ou, mgrRptGrpName); mgrRpts.Save(); try { mgrRpts = GroupPrincipalFull.FindByIdentity(activeDirectory, mgrRptGrpName); mgrRpts.DisplayName = string.Format("{0} - All Reporting Managers", user.DisplayName); mgrRpts.Save(); } catch { } try { mgrRpts = GroupPrincipalFull.FindByIdentity(activeDirectory, mgrRptGrpName); mgrRpts.Description = string.Format( "Managers who report both directly and indirectly to {0}", user.DisplayName); mgrRpts.Save(); } catch { } try { mgrRpts = GroupPrincipalFull.FindByIdentity(activeDirectory, mgrRptGrpName); mgrRpts.EmailAddress = string.Format("{0}@customer.com", mgrRptGrpName); mgrRpts.Save(); } catch { } try { mgrRpts = GroupPrincipalFull.FindByIdentity(activeDirectory, mgrRptGrpName); mgrRpts.GidNumber = int.Parse(user.EmployeeNumber); mgrRpts.Save(); } catch { } try { mgrRpts = GroupPrincipalFull.FindByIdentity(activeDirectory, mgrRptGrpName); mgrRpts.Info = string.Format("Created by {0} on {1}", projectName, DateTime.Now); mgrRpts.Save(); } catch { } try { mgrRpts = GroupPrincipalFull.FindByIdentity(activeDirectory, mgrRptGrpName); mgrRpts.ManagedBy = user.DistinguishedName; mgrRpts.Save(); } catch { } try { mgrRpts = GroupPrincipalFull.FindByIdentity(activeDirectory, mgrRptGrpName); Console.WriteLine("Adding {0} to {1}", user.DisplayName, mgrRpts.SamAccountName); mgrRpts.AddMember(user); } catch (Exception ex2) { if (!ex2.ToString().Contains("object already exists")) { Console.WriteLine(ex2); } } try { var manager = UserPrincipalFull.FindByIdentity(activeDirectory, managerDn); var mgrMgrRpts = GroupPrincipalFull.FindByIdentity(activeDirectory, PrincipalUtility.MakeSafeForLdap(manager.DisplayName + mgrRptSuffix)); mgrMgrRpts.AddMember(mgrRpts); } catch (NullReferenceException) { } catch (Exception ex2) { if (!ex2.ToString().Contains("object already exists")) { Console.WriteLine(ex2); } } } catch (Exception ex1) { Console.WriteLine(ex1); } #endregion } try { Console.WriteLine("Adding {0} to {1}", employee.DisplayName, mgrRpts.SamAccountName); mgrRpts.AddMember(employee); } catch (Exception ex1) { if (!ex1.ToString().Contains("object already exists")) { Console.WriteLine(ex1); } } } #endregion #region RecurseSubDirRpts try { var emplHasDirRpts = false; #region FilterSecondAccounts try { if ( employee.DirectReports.Any( rdn => rdn.ToLowerInvariant().Contains(employeesLdapPath.ToLowerInvariant()))) { emplHasDirRpts = true; } } catch (Exception ex1) { Console.WriteLine(ex1); } #endregion if (!emplHasDirRpts || !recursive) { continue; } #region ValidateAllRptGroup try { allRptsGroup = GroupPrincipalFull.FindByIdentity(activeDirectory, allRptGrpName); if (!string.IsNullOrEmpty(allRptsGroup.DistinguishedName)) { } } catch (Exception Ex) { #region CreateAllRptGroup try { Console.WriteLine("Creating {0}", allRptGrpName); var ou = new PrincipalContext(ContextType.Domain, null, allRptLdapPath); allRptsGroup = new GroupPrincipalFull(ou, allRptGrpName); allRptsGroup.Save(); try { allRptsGroup = GroupPrincipalFull.FindByIdentity(activeDirectory, allRptGrpName); allRptsGroup.DisplayName = string.Format("{0} - All Reporting Employees", user.DisplayName); allRptsGroup.Save(); } catch { } try { allRptsGroup = GroupPrincipalFull.FindByIdentity(activeDirectory, allRptGrpName); allRptsGroup.Description = string.Format( "Employees who report both directly and indirectly to {0}", user.DisplayName); allRptsGroup.Save(); } catch { } try { allRptsGroup = GroupPrincipalFull.FindByIdentity(activeDirectory, allRptGrpName); allRptsGroup.EmailAddress = string.Format("{0}@customer.com", allRptGrpName); allRptsGroup.Save(); } catch { } try { allRptsGroup = GroupPrincipalFull.FindByIdentity(activeDirectory, allRptGrpName); allRptsGroup.GidNumber = int.Parse(user.EmployeeNumber); allRptsGroup.Save(); } catch { } try { allRptsGroup = GroupPrincipalFull.FindByIdentity(activeDirectory, allRptGrpName); allRptsGroup.Info = string.Format("Created by {0} on {1}", projectName, DateTime.Now.ToString(CultureInfo.InvariantCulture)); allRptsGroup.Save(); } catch { } try { allRptsGroup = GroupPrincipalFull.FindByIdentity(activeDirectory, allRptGrpName); allRptsGroup.ManagedBy = user.DistinguishedName; allRptsGroup.Save(); } catch { } try { Console.WriteLine("Adding {0} to {1}", dirRptGrpName, allRptGrpName); allRptsGroup.AddMember(dirRptsGroup); } catch (Exception ex2) { Console.WriteLine(ex2); } #region AddAllRptToMgrAllRpts try { var manager = UserPrincipalFull.FindByIdentity(activeDirectory, managerDn); var mgrAllRpts = GroupPrincipalFull.FindByIdentity(activeDirectory, PrincipalUtility.MakeSafeForLdap(manager.DisplayName + allRptSuffix)); Console.WriteLine("Adding {0} to {1}", allRptGrpName, mgrAllRpts.SamAccountName); mgrAllRpts.AddMember(allRptsGroup); } catch (NullReferenceException) { } catch (Exception ex2) { if (!ex2.ToString().Contains("object already exists")) { Console.WriteLine(ex2); } } #endregion #region RemoveDirRptFromMgrAllRpts try { var manager = UserPrincipalFull.FindByIdentity(activeDirectory, managerDn); var mgrAllRpts = GroupPrincipalFull.FindByIdentity(activeDirectory, PrincipalUtility.MakeSafeForLdap(manager.DisplayName + allRptSuffix)); Console.WriteLine("Removing {0} from {1}", dirRptGrpName, mgrAllRpts.SamAccountName); mgrAllRpts.RemoveMember(dirRptsGroup); } catch (NullReferenceException) { } catch (Exception ex2) { if (!ex2.ToString().Contains("exist")) { Console.WriteLine(ex2); } } #endregion } catch (Exception ex1) { Console.WriteLine(ex1); } #endregion } #endregion Console.WriteLine("{0} has direct reports, processing recursively.", employee.DisplayName); AllDirRptsGroups(employee.SamAccountName, recursive); } catch (Exception ex2) { Console.WriteLine(ex2); } #endregion } catch (Exception ex1) { Console.WriteLine(ex1); } } #region PurgeOldDirRpts foreach (var dn in dirRptsGroup.MemberDNs) { try { var found = false; foreach (var mdn in user.DirectReports) { if (dn.ToLowerInvariant() == mdn.ToLowerInvariant()) { found = true; break; } if (dn.ToLowerInvariant() != user.DistinguishedName.ToLowerInvariant()) { continue; } found = true; break; } if (found) { continue; } var oldEmpl = UserPrincipalFull.FindByIdentity(activeDirectory, dn); Console.WriteLine("Removing old object {0} from {1}", oldEmpl.SamAccountName, dirRptsGroup.SamAccountName); dirRptsGroup.RemoveMember(oldEmpl); } catch (Exception ex) { Console.WriteLine(ex); } } #endregion } } catch (Exception ex) { Console.WriteLine(ex); } }