Beispiel #1
0
        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");
            }
        }
Beispiel #2
0
        // 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();
            });
        }
Beispiel #3
0
        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);
        }
Beispiel #4
0
        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();
                }
            }
        }
Beispiel #5
0
 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);
 }