public async Task <OrganizationApiKey> GetOrganizationApiKeyAsync(Guid organizationId, OrganizationApiKeyType organizationApiKeyType)
        {
            if (!Enum.IsDefined(organizationApiKeyType))
            {
                throw new ArgumentOutOfRangeException(nameof(organizationApiKeyType), $"Invalid value for enum {nameof(OrganizationApiKeyType)}");
            }

            var apiKeys = await _organizationApiKeyRepository
                          .GetManyByOrganizationIdTypeAsync(organizationId, organizationApiKeyType);

            if (apiKeys == null || !apiKeys.Any())
            {
                var apiKey = new OrganizationApiKey
                {
                    OrganizationId = organizationId,
                    Type           = organizationApiKeyType,
                    ApiKey         = CoreHelpers.SecureRandomString(30),
                    RevisionDate   = DateTime.UtcNow,
                };

                await _organizationApiKeyRepository.CreateAsync(apiKey);

                return(apiKey);
            }

            // NOTE: Currently we only allow one type of api key per organization
            return(apiKeys.Single());
        }
Esempio n. 2
0
        public async Task <OrganizationApiKey> RotateApiKeyAsync(OrganizationApiKey organizationApiKey)
        {
            organizationApiKey.ApiKey       = CoreHelpers.SecureRandomString(30);
            organizationApiKey.RevisionDate = DateTime.UtcNow;
            await _organizationApiKeyRepository.UpsertAsync(organizationApiKey);

            return(organizationApiKey);
        }
        public async Task RotateApiKeyAsync_RotatesKey(SutProvider <RotateOrganizationApiKeyCommand> sutProvider,
                                                       OrganizationApiKey organizationApiKey)
        {
            var existingKey = organizationApiKey.ApiKey;

            organizationApiKey = await sutProvider.Sut.RotateApiKeyAsync(organizationApiKey);

            Assert.NotEqual(existingKey, organizationApiKey.ApiKey);
            AssertHelper.AssertRecent(organizationApiKey.RevisionDate);
        }
Esempio n. 4
0
 public ApiKeyResponseModel(OrganizationApiKey organizationApiKey, string obj = "apiKey")
     : base(obj)
 {
     if (organizationApiKey == null)
     {
         throw new ArgumentNullException(nameof(organizationApiKey));
     }
     ApiKey       = organizationApiKey.ApiKey;
     RevisionDate = organizationApiKey.RevisionDate;
 }
Esempio n. 5
0
 public OrganizationApiKeyInformation(OrganizationApiKey key) : base("keyInformation")
 {
     KeyType      = key.Type;
     RevisionDate = key.RevisionDate;
 }
        public async Task ValidateBillingSyncKeyAsync_KeyDoesNotEqual_ReturnsFalse(SutProvider <ValidateBillingSyncKeyCommand> sutProvider,
                                                                                   Organization organization, OrganizationApiKey orgApiKey, string billingSyncKey)
        {
            sutProvider.GetDependency <IOrganizationApiKeyRepository>()
            .GetManyByOrganizationIdTypeAsync(organization.Id, OrganizationApiKeyType.BillingSync)
            .Returns(new[] { orgApiKey });

            Assert.False(await sutProvider.Sut.ValidateBillingSyncKeyAsync(organization, billingSyncKey));
        }
Esempio n. 7
0
        public async Task TokenEndpoint_GrantTypeClientCredentials_AsOrganization_Success(Organization organization, OrganizationApiKey organizationApiKey)
        {
            var orgRepo = _factory.Services.GetRequiredService <IOrganizationRepository>();

            organization.Enabled = true;
            organization.UseApi  = true;
            organization         = await orgRepo.CreateAsync(organization);

            organizationApiKey.OrganizationId = organization.Id;
            organizationApiKey.Type           = OrganizationApiKeyType.Default;

            var orgApiKeyRepo = _factory.Services.GetRequiredService <IOrganizationApiKeyRepository>();
            await orgApiKeyRepo.CreateAsync(organizationApiKey);

            var context = await _factory.Server.PostAsync("/connect/token", new FormUrlEncodedContent(new Dictionary <string, string>
            {
                { "grant_type", "client_credentials" },
                { "client_id", $"organization.{organization.Id}" },
                { "client_secret", organizationApiKey.ApiKey },
                { "scope", "api.organization" },
            }));

            Assert.Equal(StatusCodes.Status200OK, context.Response.StatusCode);

            await AssertDefaultTokenBodyAsync(context, "api.organization");
        }