Пример #1
0
        public async Task <AuthenticateResult> Authenticate(AuthenticateInput input, CancellationToken ct)
        {
            using (DataFilter.Disable <IMultiTenant>())
            {
                var identityUser = await UserManager.FindByEmailAsync(input.UsernameOrEmail)
                                   ?? await UserManager.FindByNameAsync(input.UsernameOrEmail);

                if (!await UserManager.CheckPasswordAsync(identityUser, input.Password))
                {
                    throw new BusinessException(ScoringDomainErrorCodes.AuthenticateFailed);
                }

                if (identityUser == null)
                {
                    throw new BusinessException(ScoringDomainErrorCodes.AuthenticateFailed);
                }
                var accessToken = await AuthJwtProvider.GenerateJwt(identityUser, ct);

                return(new AuthenticateResult(accessToken, AuthJwtProvider.JwtSettings.ExpirationDays.TotalSeconds));
            }
        }
        public async Task <RegisterTenantResult> Create(RegisterTenantInput input, CancellationToken ct)
        {
            using (DataFilter.Disable <IMultiTenant>())
            {
                var existsTenant = await TenantRepository.FindByNameAsync(input.Name, false, ct);

                if (existsTenant != null)
                {
                    throw new BusinessException(ScoringDomainErrorCodes.TenantAlreadyExists)
                          .WithData("name", input.Name);
                }
            }

            // Create tenant
            var tenant = await TenantManager.CreateAsync(input.Name);

            tenant = await TenantRepository.InsertAsync(tenant, true, ct);

            IdentityUser adminIdentity;

            using (CurrentTenant.Change(tenant.Id))
            {
                await DataSeeder.SeedAsync(
                    new DataSeedContext(tenant.Id)
                    .WithProperty("AdminEmail", input.AdminEmailAddress)
                    .WithProperty("AdminPassword", input.AdminPassword)
                    );

                adminIdentity = await UserManager.FindByEmailAsync(input.AdminEmailAddress);
            }

            var adminTokenDto = new RegisterAdminTokenDto(await AuthJwtProvider.GenerateJwt(adminIdentity, ct));
            var tenantDto     = ObjectMapper.Map <Tenant, TenantDto>(tenant);

            return(new RegisterTenantResult(adminTokenDto, tenantDto));
        }