public override async Task ProcessAsync(Auth0ResourceTemplate template)
        {
            using var managementClient = await _managementApiClientFactory.CreateAsync();

            var rule = _converter.Convert(template);

            //todo support proper pagination - how to do this where every api call is different?!
            var getRulesRequest = new GetRulesRequest
            {
                IncludeFields = true, Fields = "name,id"
            };
            var results = managementClient.Rules.GetAllAsync(getRulesRequest, Reporter);

            var matchingRule = await results.FirstOrDefaultAsync(x => string.Equals(x.Name, rule.Name));

            if (matchingRule == null)
            {
                var createRequest = Reflectorisor.CopyMembers <Rule, RuleCreateRequest>(rule);
                await Create(
                    async() => await managementClient.Rules.CreateAsync(createRequest),
                    request => request.Id,
                    rule.Name);
            }
            else
            {
                var updateRequest = Reflectorisor.CopyMembers <Rule, RuleUpdateRequest>(rule);
                await Update(
                    async() => await managementClient.Rules.UpdateAsync(matchingRule.Id, updateRequest),
                    matchingRule.Id,
                    rule.Name
                    );
            }
        }
Beispiel #2
0
        public override async Task ProcessAsync(Auth0ResourceTemplate template)
        {
            using var managementClient = await _managementApiClientFactory.CreateAsync();

            var templatedResourceServer = _converter.Convert(template);

            var results = managementClient.ResourceServers.GetAllAsync(_reporter);

            FixIllegalOptions(templatedResourceServer);

            var matchingResourceServer = await results.FirstOrDefaultAsync(x => string.Equals(x.Name, templatedResourceServer.Name));

            if (matchingResourceServer == null)
            {
                var createRequest = Reflectorisor.CopyMembers <ResourceServer, ResourceServerCreateRequest>(templatedResourceServer);
                await Create(
                    async() => await managementClient.ResourceServers.CreateAsync(createRequest),
                    request => request.Id,
                    templatedResourceServer.Name
                    );
            }
            else
            {
                var updateRequest = Reflectorisor.CopyMembers <ResourceServer, ResourceServerUpdateRequest>(templatedResourceServer);
                await Update(
                    async() => await managementClient.ResourceServers.UpdateAsync(matchingResourceServer.Id, updateRequest),
                    matchingResourceServer.Id,
                    templatedResourceServer.Name
                    );
            }
        }
Beispiel #3
0
        public override async Task ProcessAsync(Auth0ResourceTemplate template)
        {
            using var managementClient = await _managementApiClientFactory.CreateAsync();

            var client = _converter.Convert(template);

            var getClientsRequest = new GetClientsRequest
            {
                IsGlobal = false, IncludeFields = true, Fields = "name,client_id"
            };
            var results = managementClient.Clients.GetAllAsync(getClientsRequest, Reporter);

            FixIllegalOptions(client);

            var matchingClient = await results.FirstOrDefaultAsync(x => string.Equals(x.Name, client.Name));

            if (matchingClient == null)
            {
                var createRequest = Reflectorisor.CopyMembers <Client, ClientCreateRequest>(client);
                await Create(
                    async() => await managementClient.Clients.CreateAsync(createRequest),
                    request => request.ClientId,
                    client.Name);
            }
            else
            {
                var updateRequest = Reflectorisor.CopyMembers <Client, ClientUpdateRequest>(client);
                await Update(
                    async() => await managementClient.Clients.UpdateAsync(matchingClient.ClientId, updateRequest),
                    matchingClient.ClientId,
                    client.Name
                    );
            }
        }
Beispiel #4
0
        public override async Task ProcessAsync(Auth0ResourceTemplate template)
        {
            using var managementClient = await _managementApiClientFactory.CreateAsync();

            var role = _converter.Convert(template);

            var results = managementClient.Roles.GetAllAsync(new GetRolesRequest(), Reporter);

            var matchingRole = await results.FirstOrDefaultAsync(x => string.Equals(x.Name, role.Name));

            if (matchingRole == null)
            {
                var createRequest = Reflectorisor.CopyMembers <Role, RoleCreateRequest>(role);
                await Create(
                    async() => await managementClient.Roles.CreateAsync(createRequest),
                    request => request.Id,
                    role.Name);
            }
            else
            {
                var updateRequest = Reflectorisor.CopyMembers <Role, RoleUpdateRequest>(role);
                await Update(
                    async() => await managementClient.Roles.UpdateAsync(matchingRole.Id, updateRequest),
                    matchingRole.Id,
                    role.Name
                    );
            }
        }
Beispiel #5
0
        public override async Task ProcessAsync(Auth0ResourceTemplate template)
        {
            var settings = _converter.Convert(template);

            using var managementClient = await _managementApiClientFactory.CreateAsync();

            var updateRequest = Reflectorisor.CopyMembers <TenantSettings, TenantSettingsUpdateRequest>(settings);

            await Update(async() => await managementClient.TenantSettings.UpdateAsync(updateRequest),
                         template.Type.Name);
        }
Beispiel #6
0
        public override async Task ProcessAsync(Auth0ResourceTemplate template)
        {
            //get the client that matches the ClientGrant.ClientId so we get Client.Id

            using var managementClient = await _managementApiClientFactory.CreateAsync();

            var templatedGrant = _converter.Convert(template);

            var getClientsRequest = new GetClientsRequest
            {
                IsGlobal = false, IncludeFields = true, Fields = "name,client_id"
            };
            var allClients = await managementClient.Clients.GetAllAsync(getClientsRequest, new PaginationInfo());

            var matchingClient = allClients.FirstOrDefault(x => x.Name == templatedGrant.ClientId);

            if (matchingClient == null)
            {
                throw new Auth0ResourceNotFoundException($"No {ResourceType.Clients.Name} exists with name " +
                                                         $"{templatedGrant.ClientId}. Cannot create/update " +
                                                         $"{ResourceType.ClientGrants.Name} {template.Filename}");
            }

            templatedGrant.ClientId = matchingClient.ClientId;

            var allGrants     = managementClient.ClientGrants.GetAllAsync(new GetClientGrantsRequest(), Reporter);
            var existingGrant = await allGrants.FirstOrDefaultAsync(
                x => string.Equals(x.ClientId, templatedGrant.ClientId) &&
                string.Equals(x.Audience, templatedGrant.Audience));

            if (existingGrant == null)
            {
                var createRequest = Reflectorisor.CopyMembers <ClientGrant, ClientGrantCreateRequest>(templatedGrant);
                await Create(
                    async() => await managementClient.ClientGrants.CreateAsync(createRequest),
                    request => request.Id,
                    $"[{matchingClient.Name}|{createRequest.Audience}]");
            }
            else
            {
                var updateRequest = Reflectorisor.CopyMembers <ClientGrant, ClientGrantUpdateRequest>(templatedGrant);
                await Update(
                    async() => await managementClient.ClientGrants.UpdateAsync(existingGrant.Id, updateRequest),
                    existingGrant.Id,
                    $"[{matchingClient.Name}|{existingGrant.Audience}]");
            }
        }
Beispiel #7
0
        public override async Task ProcessAsync(Auth0ResourceTemplate template)
        {
            using var managementClient = await _managementApiClientFactory.CreateAsync();

            var templatedConnection = _converter.Convert(template);

            var getConnectionsRequest = new GetConnectionsRequest
            {
                IncludeFields = true,
                Fields        = "name,id"
            };
            var allConnections = managementClient.Connections.GetAllAsync(getConnectionsRequest, Reporter);

            var matchingConnection = await allConnections.FirstOrDefaultAsync(x => string.Equals(x.Name, templatedConnection.Name));

            if (matchingConnection == null)
            {
                var createRequest = Reflectorisor.CopyMembers <Connection, ConnectionCreateRequest>(templatedConnection);
                await Create(
                    async() => await managementClient.Connections.CreateAsync(createRequest),
                    request => request.Id,
                    templatedConnection.Name
                    );
            }
            else
            {
                var updateRequest = Reflectorisor.CopyMembers <Connection, ConnectionUpdateRequest>(templatedConnection);
                //Remove the name property. It's not allowed on an update.
                updateRequest.Name = null;

                await Update(
                    async() => await managementClient.Connections.UpdateAsync(matchingConnection.Id, updateRequest),
                    matchingConnection.Id,
                    templatedConnection.Name
                    );
            }
        }
Beispiel #8
0
        public async Task TestClient()
        {
            var from = JsonConvert.DeserializeObject <Client>(await File.ReadAllTextAsync("./SampleData/Templates/clients/tones-localhost.template.json"));

            var to = Reflectorisor.CopyMembers <Client, ClientCreateRequest>(from);

            to.AddOns?.ShouldBe(from.AddOns);
            to.AllowedClients.ShouldBe(from.AllowedClients);
            to.AllowedLogoutUrls.ShouldBe(from.AllowedLogoutUrls);
            to.AllowedOrigins.ShouldBe(from.AllowedOrigins);
            //Application is declared with the same sig on both typeof(to) and typeof(from) so should be copied.
            to.ApplicationType.ShouldBe(from.ApplicationType);
            to.Callbacks.ShouldBe(from.Callbacks);
            to.ClientAliases.ShouldBe(from.ClientAliases);
            to.ClientMetaData?.ShouldBe(from.ClientMetaData);
            to.ClientSecret.ShouldBe(from.ClientSecret);
            to.CustomLoginPage.ShouldBe(from.CustomLoginPage);
            to.CustomLoginPagePreview.ShouldBe(from.CustomLoginPagePreview);
            to.Description.ShouldBe(from.Description);
            to.EncryptionKey.ShouldBe(from.EncryptionKey);
            to.FormTemplate.ShouldBe(from.FormTemplate);
            to.InitiateLoginUri.ShouldBe(from.InitiateLoginUri);
            to.IsCustomLoginPageOn.ShouldBe(from.IsCustomLoginPageOn);
            to.IsFirstParty.ShouldBe(from.IsFirstParty);
            // to.IsHerokuApp.ShouldBe(from...); //IsHerokuApp doesn't exist on CreateClientRequest
            to.JwtConfiguration.ShouldDeepEqual(from.JwtConfiguration);
            to.LogoUri.ShouldBe(from.LogoUri);
            to.Mobile.ShouldBe(from.Mobile);
            to.Name.ShouldBe(from.Name);
            to.OidcConformant.ShouldBe(from.OidcConformant);
            to.ResourceServers.ShouldBe(from.ResourceServers);
            to.Sso.ShouldBe(from.Sso);
            //TokenEndpointAuthMethod is declared with the same sig on both typeof(to) and typeof(from) so should be copied.
            to.TokenEndpointAuthMethod.ShouldBe(from.TokenEndpointAuthMethod);
            to.WebOrigins.ShouldBe(from.WebOrigins);
        }