public void Main( [Option("organization_code", "organization code")] int organizationCode ) { _logger.LogInformation($"{GetType().FullName} Start"); try { var domainSets = _configuration.GetSection("ActiveDirectorySync") .Get <List <OrganizationDomainSet> >() .Where(d => d.OrganizationCode == organizationCode); foreach (var organizationDomain in domainSets) { _logger.LogDebug($"{organizationDomain.OrganizationCode} {organizationDomain.DomainName}"); var ldapContext = new LdapContext(organizationDomain.LdapConfig.Server, organizationDomain.LdapConfig.Port, organizationDomain.LdapConfig.DomainAndUser, organizationDomain.LdapConfig.Password); var ldapRepository = new LdapRepository(ldapContext); DoIt(ldapRepository, organizationDomain.OrganizationCode, organizationDomain.DomainName, organizationDomain.DeviceGroupObjectGuidArray, organizationDomain.UserGroupObjectGuidArray); } _logger.LogInformation($"{GetType().FullName} Success"); } catch (Exception e) { _logger.LogError(e.Message, e); _logger.LogInformation($"{GetType().FullName} Error"); } }
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IServiceProvider svp, ILogger <Startup> logger) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); LdapConnectionSettings.Current = Configuration.GetSection("LdapConnection").Get <LdapConnectionSettings>(); } else { // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. app.UseHsts(); app.UseHttpsRedirection(); } app.UseExceptionHandler(builder => { builder.Run(async context => { context.Response.ContentType = "application/json"; IExceptionHandlerFeature contextFeature = context.Features.Get <IExceptionHandlerFeature>(); Error error = (contextFeature != null) ? new Error(contextFeature.Error) : new Error(new Exception("Unknown Exception")); error.Code = context.Response.StatusCode; logger.LogError(error.ToString()); await context.Response.WriteAsync(error.ToString()); }); }); app.UseSwagger(); app.UseRouting(); //app.UseAuthentication(); //app.UseAuthorization(); // https://medium.com/@rukshandangalla/how-to-notify-your-angular-5-app-using-signalr-5e5aea2030b2 app.UseCors("CorsPolicy"); app.UseSwaggerUI(c => { c.SwaggerEndpoint("/swagger/v2/swagger.json", "Request Manager API V2"); c.RoutePrefix = string.Empty; }); // https://stackoverflow.com/questions/37329354/how-to-use-ihttpcontextaccessor-in-static-class-to-set-cookies //here is where you set you accessor IHttpContextAccessor accessor = svp.GetService <IHttpContextAccessor>(); LdapRepository.SetHttpContextAccessor(accessor); app.UseEndpoints(endpoints => { endpoints.MapControllers(); }); }
static void Main(string[] args) { var noInLdapUsers = new List <ShareUserInfo>(); var noInDbUsers = new List <ShareUserInfo>(); using (var dbContext = new DatabaseContext()) { var resources = dbContext.Resources.Where(r => !r.Deleted && r.Description.ToLower().Contains("shar") && r.Description.ToLower().Contains("(") && r.Description.ToLower().Contains(")")) .ToList() .Select(r => new { r.IdResource, r.Name, r.Description, Share = r.Description.Substring(r.Description.IndexOf('(') + 1, r.Description.IndexOf(')') - r.Description.IndexOf('(') - 1) }).Where(r => !string.IsNullOrEmpty(r.Share)); var rightService = new RightService(new RightRepository(dbContext)); var ldapRepository = new LdapRepository(ConfigurationManager.AppSettings["ldap_username"], ConfigurationManager.AppSettings["ldap_password"]); Console.ForegroundColor = ConsoleColor.Green; foreach (var resource in resources) { Console.WriteLine(@"Processing share {0}", resource.Share); var userResources = rightService.GetResourceRightsOnDate(DateTime.Now.Date, resource.IdResource).GroupBy(r => new { r.IdRequestUser, r.IdResource, r.ResourceName, r.ResourceDescription }).ToList(); var ldapUsers = ldapRepository.GetUsersInGroup(ldapRepository.ConvertGroupNameToCn(resource.Share.Split(',')[0].Trim())).ToList(); foreach (var userResource in userResources) { var user = dbContext.Users.FirstOrDefault(r => r.IdRequestUser == userResource.Key.IdRequestUser); if (user != null && user.Login != null && !ldapUsers.Any(u => string.Equals(u.Login, user.Login, StringComparison.CurrentCultureIgnoreCase))) { Console.WriteLine(@"No user in ldap: {0} ({1}), resource {2}", user.Snp, user.Login, userResource.Key.ResourceName); noInLdapUsers.Add(new ShareUserInfo { Login = user.Login, Snp = user.Snp, ResourceName = userResource.Key.ResourceName, ResourceDescription = userResource.Key.ResourceDescription }); } } foreach (var ldapUser in ldapUsers) { var founded = false; foreach (var userResource in userResources) { var user = dbContext.Users.FirstOrDefault(r => r.IdRequestUser == userResource.Key.IdRequestUser); if (user != null && user.Login != null && string.Equals(ldapUser.Login, user.Login, StringComparison.CurrentCultureIgnoreCase)) { founded = true; break; } } if (!founded) { Console.WriteLine(@"No user in rqrights: {0} ({1}), resource {2}", ldapUser.Snp, ldapUser.Login, resource.Name); noInDbUsers.Add(new ShareUserInfo { Login = ldapUser.Login, Snp = ldapUser.Snp, ResourceName = resource.Name, ResourceDescription = resource.Description }); } } } } SaveStatisticToFile(ConfigurationManager.AppSettings["shares_statistic_file_name"], noInDbUsers, noInLdapUsers); }
private void DoIt(LdapRepository ldapRepository, int organizationCode, string domainName, string[] targetDeviceGroupGuIdArray, string[] targetUserGroupGuIdArray) { var organization = _userRepository.GetOrganization(organizationCode); if (organization.StartDate > DateTime.Now.Date || (organization.EndDate != null && organization.EndDate < DateTime.Now.Date)) { _logger.LogWarning($"[{organizationCode}-{domainName}] Organization is not target {organization.Code} {organization.StartDate} {organization.EndDate}"); return; } if ((targetDeviceGroupGuIdArray == null || targetDeviceGroupGuIdArray.Length == 0) || (targetUserGroupGuIdArray == null || targetUserGroupGuIdArray.Length == 0)) { if (targetDeviceGroupGuIdArray == null || targetDeviceGroupGuIdArray.Length == 0) { _logger.LogWarning($"[{organizationCode}-{domainName}] DeviceGroupObjectGuidArray is empty. Skipped."); } if (targetUserGroupGuIdArray == null || targetUserGroupGuIdArray.Length == 0) { _logger.LogWarning($"[{organizationCode}-{domainName}] UserGroupObjectGuidArray is empty. Skipped."); } return; } var ldapDomains = ldapRepository.GetDomain(domainName).ToList(); var ldapDeviceGroups = ldapRepository.GetDeviceGroupWithDevices(domainName, targetDeviceGroupGuIdArray).ToList(); var ldapUserGroups = ldapRepository.GetUserGroupWithUsers(domainName, targetUserGroupGuIdArray).ToList(); var domains = _userRepository.GetDomainsByOrganizationCode(organizationCode).ToList(); var deviceGroups = _userRepository.GetDeviceGroupByOrganizationCode(organizationCode).ToList(); var devices = _userRepository.GetDeviceByOrganizationCode(organizationCode).ToList(); var userGroups = _userRepository.GetUserGroupByOrganizationCode(organizationCode).ToList(); var users = _userRepository.GetUserByOrganizationCode(organizationCode).ToList(); new AdDomainSynchronizer(_logger, _userRepository, _authenticationRepository, organizationCode, domains, ldapDomains).Synchronize(); foreach (var ldapDomain in ldapDomains.Where(r => (domains.Select(d => d.AdObjectId).ToList()).Contains(r.ObjectGuid)).ToList()) { var targetDomain = domains .Where(r => r.OrganizationCode == organizationCode && r.AdObjectId == ldapDomain.ObjectGuid) .ToList().First(); new AdUserGroupSynchronizer(_logger, _userRepository, _authenticationRepository, organizationCode, targetDomain, userGroups, ldapUserGroups).Synchronize(); // 上記で更新した結果を最新取得 userGroups = _userRepository.GetUserGroupByOrganizationCode(organizationCode).ToList(); // ユーザーを最新 foreach (var ldap in ldapUserGroups) { var ldapUserGroup = (LdapUserGroup)ldap; UserGroup userGroup = userGroups.Where(r => r.AdObjectId == ldapUserGroup.ObjectGuid).FirstOrDefault(); new AdUserSynchronizer(_logger, _userRepository, _authenticationRepository, organizationCode, targetDomain, userGroup, users, ldapUserGroup.UserList).Synchronize(); } new AdDeviceGroupSynchronizer(_logger, _userRepository, _authenticationRepository, organizationCode, targetDomain, deviceGroups, ldapDeviceGroups).Synchronize(); // 上記で更新した結果を最新取得 deviceGroups = _userRepository.GetDeviceGroupByOrganizationCode(organizationCode).ToList(); // 端末を最新 foreach (var ldap in ldapDeviceGroups) { var ldapDeviceGroup = (LdapDeviceGroup)ldap; var deviceGroup = deviceGroups.Where(r => r.AdObjectId == ldapDeviceGroup.ObjectGuid).FirstOrDefault(); new AdDeviceSynchronizer(_logger, _userRepository, _authenticationRepository, organizationCode, targetDomain, deviceGroup, devices, ldapDeviceGroup.DeviceList).Synchronize(); } } }
public RepositoryTest() { Compiler = new LdapFilterCompiler(); Entry = new DirectoryEntry("LDAP://localhost:389/o=example", "cn=neoman,ou=users,o=example", "testtest", AuthenticationTypes.None); Repo = new LdapRepository(Entry); }