Exemple #1
0
        public List <string> ExecuteSync(string username)
        {
            var adUser = AdAccount.For(username).Name;

            var task = Task.Run(async() => {
                return(await _rolesUsuarioReadOnlyRepository.Get(adUser));
            });

            return(task.Result);
        }
Exemple #2
0
        public void ImplicitConversionToStringReturnsDomainAndName()
        {
            const string value = "am\\moh";

            var account = new AdAccount(value);

            string result = account;

            Assert.Equal(value, result);
        }
Exemple #3
0
        public void ImplicitConversionToStringResultsInCorrectString()
        {
            const string value = "SSW\\Jason";

            var account = AdAccount.For(accountString: value);

            string result = account;

            Assert.Equal(expected: value, actual: result);
        }
        public void ImplicitConversionToStringReturnsDomainAndName()
        {
            const string value = "SSW\\Jason";

            var account = AdAccount.For(value);

            string result = account;

            result.ShouldBe(value);
        }
        public void ToString_ShouldResultInCorrectString()
        {
            const string accountString = "SSW\\Jason";

            var account = AdAccount.For(accountString);

            var result = account.ToString();

            result.ShouldBe(accountString);
        }
Exemple #6
0
        public void ImplicitConversionToStringResultsInCorrectString()
        {
            const string value = "Showcase\\Hamza";

            var account = AdAccount.For(value);

            string result = account;

            Assert.Equal(value, result);
        }
        public void ImplicitConversionToStringResultsInCorrectString()
        {
            const string accountString = "SSW\\Jason";

            var account = AdAccount.For(accountString);

            string result = account;

            result.Should().Be(accountString);
        }
        public void ImplicitConversionToStringResultsInCorrectString()
        {
            const string accountString = "MyCompany\\Shulga";

            var account = AdAccount.For(accountString);

            string result = account;

            result.Should().Be(accountString);
        }
        public void ToStringReturnsCorrectFormat()
        {
            const string accountString = "MyCompany\\Shulga";

            var account = AdAccount.For(accountString);

            string result = account.ToString();

            result.Should().Be(accountString);
        }
Exemple #10
0
        public void ToStringReturnsCorrectFormat()
        {
            const string accountString = "SSW\\Jason";

            var account = AdAccount.For(accountString);

            var result = account.ToString();

            result.Should().Be(accountString);
        }
Exemple #11
0
        public UserAccountRepositoryTests()
        {
            this.sut = this.ServiceProvider.GetService <IUserAccountRepository>();
            var domains = new[] { "East", "West" };

            this.entityFaker = new Faker <UserAccount>() //https://github.com/bchavez/Bogus
                               .RuleFor(u => u.Email, (f, u) => f.Internet.Email())
                               .RuleFor(u => u.LastVisitDate, (f, u) => new DateTimeEpoch())
                               .RuleFor(u => u.RegisterDate, (f, u) => new DateTimeEpoch())
                               .RuleFor(u => u.TenantId, (f, u) => this.tenantId)
                               .RuleFor(u => u.AdAccount, (f, u) => AdAccount.For(f.PickRandom(new[] { "East", "West" }) + $"\\{f.System.Random.AlphaNumeric(5)}"))
                               .RuleFor(u => u.VisitCount, (f, u) => 1);
        }
        public async Task Process(TRequest request, CancellationToken cancellationToken)
        {
            var    requestName = typeof(TRequest).Name;
            var    userId      = _currentUserService.UserId ?? string.Empty;
            string userName    = string.Empty;

            if (!string.IsNullOrEmpty(userId))
            {
                userName = await _domainUserService.GetUserNameAsync(AdAccount.For(userId));
            }

            _logger.LogInformation("OfficeEntry Request: {Name} {@UserId} {@UserName} {@Request}",
                                   requestName, userId, userName, request);
        }
        public async Task <IActionResult> Add([FromBody] UserDto userDto)
        {
            var user = new User
            {
                Firstname = userDto.Firstname,
                Surname   = userDto.Surname,
                Account   = AdAccount.For(userDto.Account)
            };

            _logger.LogInfo($"Add user with firstname {userDto.Firstname}");

            await _repository.AddAsync(user);

            return(Ok());
        }
Exemple #14
0
        public async Task <string> GetUserNameAsync(AdAccount adAccount)
        {
            return(await Task.Run(() =>
            {
                using var AD = new PrincipalContext(ContextType.Domain, _domainName);
                var userIdentity = UserPrincipal.FindByIdentity(AD, adAccount.Name);

                if (userIdentity == null)
                {
                    throw new AdAccountInvalidException(adAccount);
                }

                return userIdentity.DisplayName;
            }));
        }
        public async Task <IActionResult> Update(int id, [FromBody] UserDto userDto)
        {
            var user = new User
            {
                Firstname = userDto.Firstname,
                Surname   = userDto.Surname,
                Account   = AdAccount.For(userDto.Account)
            };

            _logger.LogInfo($"Update user with id '{id}'");

            await _repository.AddAsync(user);

            return(Ok());
        }
        public ActionResult Login(LoginModel model, string returnUrl)
        {
            if (ModelState.IsValid)
            {
                var a       = model.UserName.Split('\\');
                var domain  = a.Length > 1 ? a[0] : "";
                var userId  = a.Length > 1 ? a[1] : model.UserName;
                var isAdmin = IsAdmin(userId, model.Password);
                var role    = isAdmin ? "admin" : "user";

                if (isAdmin || AdAccount.IsAuthenticated(domain, userId, model.Password))
                {
                    FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
                        1,
                        model.UserName,
                        DateTime.Now,
                        DateTime.Now.Add(FormsAuthentication.Timeout),
                        true,
                        role
                        );

                    HttpCookie cookie = new HttpCookie(
                        FormsAuthentication.FormsCookieName,
                        FormsAuthentication.Encrypt(ticket));
                    Response.Cookies.Add(cookie);

                    if (!String.IsNullOrEmpty(returnUrl))
                    {
                        return(Redirect(returnUrl));
                    }
                    else
                    {
                        if (isAdmin)
                        {
                            return(RedirectToAction("Index", "Admin", new { Key = DateTime.Now }));
                        }

                        return(RedirectToAction("Index", "Document", new { Key = DateTime.Now }));
                    }
                }
                else
                {
                    ModelState.AddModelError("", "用户名或密码不正确");
                }
            }

            return(View());
        }
Exemple #17
0
    public static AdAccount For(string accountString)
    {
        var account = new AdAccount();

        try
        {
            var index = accountString.IndexOf("\\", StringComparison.Ordinal);
            account.Domain = accountString.Substring(0, index);
            account.Name   = accountString.Substring(index + 1);
        }
        catch (Exception ex)
        {
            throw new AdAccountInvalidException(accountString, ex);
        }
        return(account);
    }
        public UserAccountRepositoryTests()
        {
            //this.sut = this.ServiceProvider.GetService<IUserAccountRepository>();
            this.sut = this.ServiceProvider.GetRequiredService <IGenericRepository <UserAccount> >();
            this.ServiceProvider.GetRequiredService <UserAccountsDbContext>().Database.Migrate();
            var domains = new[] { "East", "West" };

            this.entityFaker = new Faker <UserAccount>() //https://github.com/bchavez/Bogus
                               .RuleFor(u => u.Email, (f, u) => f.Internet.Email())
                               .RuleFor(u => u.LastVisitDate, (f, u) => DateTime.UtcNow.AddDays(-1))
                               .RuleFor(u => u.RegisterDate, (f, u) => DateTime.UtcNow.AddDays(-14))
                               .RuleFor(u => u.TenantId, (f, u) => this.tenantId)
                               .RuleFor(u => u.AdAccount, (f, u) => AdAccount.For(f.PickRandom(new[] { "East", "West" }) + $"\\{f.System.Random.AlphaNumeric(5)}"))
                               //.RuleFor(u => u.Status, (f, u) => f.PickRandom(new[] { UserAccountStatus.Active, UserAccountStatus.Inactive }))
                               .RuleFor(u => u.Status, (f, u) => f.PickRandom(new[] { UserAccountStatus.For("Active"), UserAccountStatus.For("Inactive") }))
                               .RuleFor(u => u.VisitCount, (f, u) => 1);
        }
            public async Task <Unit> Handle(CreateUserCommand request, CancellationToken cancellationToken)
            {
                var entity = new User
                {
                    CreatedBy      = AdAccount.For(request.UserName).UserName,
                    DepartmentName = request.DepartmentName,
                    Division       = request.Division,
                    LastModifiedBy = AdAccount.For(request.UserName).UserName,
                    Name           = new Name(request.FirstMidName, request.LastName),
                    AdAccount      = AdAccount.For(request.UserName),
                };

                _context.Set <User>().Add(entity);

                await _context.SaveChangesAsync(cancellationToken);

                return(Unit.Value);
            }
Exemple #20
0
        public UserProfileOutput Execute(string adAccount)
        {
            var adUser = AdAccount.For(adAccount);

            var roles = Task.Run(async() =>
            {
                return(await _rolesUsuarioReadOnlyRepository.Get(adUser.Name));
            });

            var funcionario = Task.Run(async() =>
            {
                return(await _funcionarioUsuarioReadOnlyRepository.Get(adUser.Name));
            });

            if (funcionario.Result == null)
            {
                return(null);
            }

            return(UserProfileOutput.LoadRoles(adUser.Name, funcionario.Result.FuncionarioID, funcionario.Result.NombreCompleto.ToString(),
                                               funcionario.Result.EstadoID, funcionario.Result.Estado, funcionario.Result.Email, roles.Result));
        }
        public void ShouldHaveCorrectName()
        {
            var account = AdAccount.For("SSW\\Jason");

            account.Name.ShouldBe("Jason");
        }
        public void ShouldHaveCorrectDomain()
        {
            var account = new AdAccount("SSW\\Jason");

            Assert.Equal("SSW", account.Domain);
        }
Exemple #23
0
        public void Should_Have_Domain()
        {
            var account = new AdAccount("aforbes\\motjopet");

            Assert.AreEqual("aforbes", account.Domain);
        }
Exemple #24
0
 public async Task <ActionResult <string> > Get()
 {
     return(await _domainUserService.GetUserNameAsync(AdAccount.For(User.Identity.Name)));
 }
Exemple #25
0
        public static ModuleOptions AddUserAccountsModule(
            this ModuleOptions options,
            string connectionString         = null,
            string section                  = "naos:sample:userAccounts:entityFramework",
            UserAccountsDbContext dbContext = null)
        {
            EnsureArg.IsNotNull(options, nameof(options));
            EnsureArg.IsNotNull(options.Context, nameof(options.Context));

            options.Context.AddTag("useraccounts");

            if (dbContext != null)
            {
                options.Context.Services.AddSingleton(dbContext); // cross wiring, warning this will be a singleton (not scoped)
            }

            var configuration = options.Context.Configuration?.GetSection(section).Get <EntityFrameworkConfiguration>();

            options.Context.Services.AddScoped <IGenericRepository <UserAccount> >(sp =>
            {
                return(new UserAccountRepository(
                           new RepositoryTracingDecorator <UserAccount>(
                               sp.GetService <ILogger <UserAccountRepository> >(),
                               sp.GetService <ITracer>(),
                               new RepositoryLoggingDecorator <UserAccount>(
                                   sp.GetRequiredService <ILogger <UserAccountRepository> >(),
                                   //new RepositoryTenantDecorator<UserAccount>(
                                   //"naos_sample_test", // TODO: resolve from runtime context
                                   //new RepositorySoftDeleteDecorator<UserAccount>(
                                   new EntityFrameworkRepository <UserAccount>(o => o
                                                                               .LoggerFactory(sp.GetRequiredService <ILoggerFactory>())
                                                                               .Mediator(sp.GetRequiredService <IMediator>())
                                                                               .DbContext(sp.GetRequiredService <UserAccountsDbContext>()))))));
            });

            options.Context.Services.AddScoped <IGenericRepository <UserVisit> >(sp =>
            {
                return(new UserVisitRepository(
                           new RepositoryTracingDecorator <UserVisit>(
                               sp.GetService <ILogger <UserVisitRepository> >(),
                               sp.GetService <ITracer>(),
                               new RepositoryLoggingDecorator <UserVisit>(
                                   sp.GetRequiredService <ILogger <UserVisitRepository> >(),
                                   new RepositoryTenantDecorator <UserVisit>(
                                       "naos_sample_test", // TODO: resolve from runtime context
                                       new RepositoryStateSoftDeleteDecorator <UserVisit>(
                                           new EntityFrameworkRepository <UserVisit>(o => o
                                                                                     .LoggerFactory(sp.GetRequiredService <ILoggerFactory>())
                                                                                     .Mediator(sp.GetRequiredService <IMediator>())
                                                                                     .DbContext(sp.GetRequiredService <UserAccountsDbContext>())
                                                                                     .Mapper(new AutoMapperEntityMapper(MapperFactory.Create())))))))));
            });

            options.Context.Services.AddDbContext <UserAccountsDbContext>(o => o
                                                                          //.UseSqlServer("Server=127.0.0.1;Database=naos_sample;User=sa;Password=Abcd1234!;Trusted_Connection=False;MultipleActiveResultSets=True;", o => o // docker
                                                                          //.UseSqlServer(configuration.ConnectionString.EmptyToNull() ?? $"Server=(localdb)\\mssqllocaldb;Database={nameof(UserAccountsDbContext)};Trusted_Connection=True;MultipleActiveResultSets=True;", o => o
                                                                          .UseSqlServer(configuration.ConnectionString, o => o
                                                                                        .MigrationsHistoryTable("__MigrationsHistory", "useraccounts")
                                                                                        .EnableRetryOnFailure())
                                                                          .UseLoggerFactory(options.Context.Services.BuildServiceProvider().GetRequiredService <ILoggerFactory>())
                                                                          //.ConfigureWarnings(w => w.Throw(RelationalEventId.QueryClientEvaluationWarning))
                                                                          .EnableSensitiveDataLogging()
                                                                          .EnableDetailedErrors());

            options.Context.Services.AddStartupTask <ApplyPendingMigrationsTask <UserAccountsDbContext> >();
            options.Context.Services.AddStartupTask <EchoStartupTask>(new TimeSpan(0, 0, 3));
            options.Context.Services.AddSeederStartupTask <UserAccountsDbContext, UserAccount>(new[]
            {
                new UserAccount()
                {
                    Id = Guid.Parse("100fb10f-2ad4-4bd1-9b33-6410a5ce7b25"), Email = "*****@*****.**", TenantId = "naos_sample_test", AdAccount = AdAccount.For("East\\admin"), Status = UserAccountStatus.Active
                },
                new UserAccount()
                {
                    Id = Guid.Parse("100fb10f-2ad4-4bd1-9b33-6410a5ce7b26"), Email = "*****@*****.**", TenantId = "naos_sample_test", AdAccount = AdAccount.For("East\\test26"), Status = UserAccountStatus.Active
                },
                new UserAccount()
                {
                    Id = Guid.Parse("100fb10f-2ad4-4bd1-9b33-6410a5ce7b27"), Email = "*****@*****.**", TenantId = "naos_sample_test", AdAccount = AdAccount.For("East\\test27"), Status = UserAccountStatus.Active
                },
            }, delay: new TimeSpan(0, 0, 10));
            //options.Context.Services.AddStartupTask(sp =>
            //    new SeederStartupTask(
            //        sp.GetRequiredService<ILoggerFactory>(),
            //        sp.CreateScope().ServiceProvider.GetService(typeof(IGenericRepository<UserAccount>)) as IGenericRepository<UserAccount>));

            options.Context.Services.AddHealthChecks()
            .AddSqlServer(configuration.ConnectionString, name: "UserAccounts-sqlserver");

            options.Context.Services.AddHealthChecks() // https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/health-checks?view=aspnetcore-3.1#entity-framework-core-dbcontext-probe
            .AddDbContextCheck <UserAccountsDbContext>(name: "UserAccounts-dbcontext");

            options.Context.Messages.Add("naos services builder: useraccounts service added");

            return(options);
        }
        public void ShouldHaveCorrectName()
        {
            var account = new AdAccount("SSW\\Jason");

            Assert.Equal("Jason", account.Name);
        }
        public void ShouldHaveCorrectDomainAndName()
        {
            var account = AdAccount.For("SSW\\Jason");

            account.Domain.ShouldBe("SSW");
        }
Exemple #28
0
        public void ShouldHaveCorrectDomain()
        {
            var account = new AdAccount("am\\moh");

            Assert.Equal("am", account.Domain);
        }
Exemple #29
0
        public void Should_Have_Name()
        {
            var account = new AdAccount("aforbes\\motjopet");

            Assert.AreEqual("motjopet", account.Name);
        }
Exemple #30
0
        public void ShouldHaveCorrectName()
        {
            var account = new AdAccount("am\\moh");

            Assert.Equal("moh", account.Name);
        }